在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"。



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