在sql server中实现区分大小写的验证

今天突然想到这个问题了,在sql server里面默认是不区分大小写的,那涉及到登录用户和密码的时候,要是输入大小写账号和相同的密码岂不是都能登录了,这个其实是存在问题的,查了一下网上论坛的回答和博客,给出了以下几种解决方案,贴出来供大家参考:

第一种解决方案:

</pre><p><pre name="code" class="sql">ALTER TABLE tb
ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS
--不区分大小写
ALTER TABLE tb
ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CS_AS
--区分大小写
alter database 数据库 COLLATE Chinese_PRC_CS_AS



第二种解决方案:
--创建如下用户自定义函数(UDF)

CREATE FUNCTION StrComp(@Str1 VARCHAR(50),@Str2 VARCHAR(50))
--ALTER FUNCTION StrComp(@Str1 VARCHAR(50),@Str2 VARCHAR(50))
RETURNS INTEGER
AS
BEGIN
  DECLARE @i INTEGER
  --DECLARE @Str1 VARCHAR(50)
  --DECLARE @Str2 VARCHAR(50)
  DECLARE @y INT
  --SET @Str1='a'
  --SET @Str2='A'
  SET  @i=0
  --SELECT ASCII(SUBSTRING(@Str1,@i+1,1))
  SET @y=1
  DECLARE @iLen INT
  SET @iLen = LEN(LTRIM(RTRIM(@Str1)))
  IF LEN(LTRIM(RTRIM(@Str1))) < LEN(LTRIM(RTRIM(@Str2))) --THEN
     SET @iLen = LEN(LTRIM(RTRIM(@Str2)))
  WHILE (@i < @iLen)
    BEGIN
      IF (ASCII(SUBSTRING(@Str1,@i+1,1))=ASCII(SUBSTRING(@Str2,@i+1,1))) --THEN
         SET @i = @i +1
      ELSE
         BEGIN
           SET @y=0
           BREAK
         END
      END
     RETURN @y
END

测试:
select *
from Table1
Where dbo.StrComp(Field1,'aAbB') =1 


第三种解决方案:
SQL Server 数据库中的文本信息可以用大写字母、小写字母或二者的组合进行存储。例如,姓氏可以"SMITH"、"Smith"或"smith"等形式出现。

数据库是否区分大小写取决于 SQL Server 的安装方式。如果数据库区分大小写,当搜索文本数据时,必须用正确的大小写字母组合构造搜索条件。例如,如果搜索名字"Smith",则不能使用搜索条件"=smith"或"=SMITH"。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章