ALTER PROCEDURE B_EMPLOYEE_PWD_VAR @ID bigint,
@UserPwd nvarchar(12)

AS
/*验证用户密码*/
SELECT UserPwd
FROM B_Employee
WHERE (ID = @ID) AND (UserPwd=@UserPwd)ID和UserPwd是B_Employee表里的俩个列这样写密码不区分大小写,用ABC和abc都能得到结果,怎样才能实现密码严格匹配区分大小写呢?

解决方案 »

  1.   

    SELECT UserPwd 
    FROM B_Employee 
    WHERE (ID COLLATE CHINESE_PRC_CS_AS_KS_WS = @ID COLLATE CHINESE_PRC_CS_AS_KS_WS ) 
        AND (UserPwd COLLATE CHINESE_PRC_CS_AS_KS_WS =@UserPwd COLLATE CHINESE_PRC_CS_AS_KS_WS ) 
      

  2.   

    --1.查询区分全角与半角字符
    --测试数据
    DECLARE @t TABLE(col varchar(10))
    INSERT @t SELECT 'aa'
    UNION ALL SELECT 'Aa'
    UNION ALL SELECT 'AA'   --全角A
    UNION ALL SELECT 'A,A' --全角A,半角逗号(,)
    UNION ALL SELECT 'A,A' --全角A,全角逗号(,)--1.查大写字母
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%A%'--2.查全角字母
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%A%'--3.查半角逗号(,)
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%,%'--3.查全角逗号(,)
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%,%'
    GO
      

  3.   

    ALTER PROCEDURE B_EMPLOYEE_PWD_VAR @ID bigint, 
    @UserPwd nvarchar(12) AS 
    /*验证用户密码*/ 
    SELECT UserPwd 
    FROM B_Employee 
    WHERE (ID = @ID) AND (UserPwd=@UserPwd) 
    COLLATE Chinese_PRC_CS_AS
      

  4.   


    sql排序规则如果要是区分大小写的话,就要改变数据库的排序规则。1、查看系统中所支持的全部排序规则列表         SELECT * FROM ::fn_helpcollations()2、查看当前系统的排序规则.         SELECT   SERVERPROPERTY('Collation')3、改变数据库的排序规则(做ALTER之前,要中断所有用户对此数据库的访问)语法:
              use master
              go
              ALTER DATABASE 数据库名 COLLATE 排序规则名
    例子:
              use master
              go
              ALTER DATABASE luwanzhufa COLLATE Chinese_PRC_CS_AS* 我查过。Chinese_PRC_CS_AS这个是简体中文。而且区分大小写的排序规则。192 Japanese_BIN  二进制顺序、用于 932(日文)字符集。 
    193 Japanese_CI_AS 字典顺序、不区分大小写、用于 932(日文)字符集。 
    200 Japanese_CS_AS 字典顺序、区分大小写、用于 932(日文)字符集。
    198 Chinese_PRC_BIN 二进制顺序、用于 936(简体中文)字符集。
    199 Chinese_PRC_CI_AS 字典顺序、不区分大小写、用于 936(简体中文)字符集。
    203 Chinese_PRC_CS_AS 字典顺序、区分大小写、用于 936(简体中文)字符集。
      

  5.   


    用上面的代码报错,说collate附近有语法错误!
      

  6.   

    ALTER PROCEDURE B_EMPLOYEE_PWD_VAR 
    @ID bigint, 
    @UserPwd nvarchar(12) 
    AS 
    /*验证用户密码*/ 
    SELECT UserPwd 
    FROM B_Employee 
    WHERE (ID COLLATE Chinese_PRC_CS_AS = @ID) AND (UserPwd COLLATE Chinese_PRC_CS_AS =@UserPwd) 
      

  7.   

    --try
    ALTER PROCEDURE B_EMPLOYEE_PWD_VAR @ID bigint, 
    @UserPwd nvarchar(12) AS 
    /*验证用户密码*/ 
    SELECT UserPwd 
    FROM B_Employee 
    WHERE (ID COLLATE Chinese_PRC_CS_AS  = @ID COLLATE Chinese_PRC_CS_AS ) AND (UserPwd COLLATE Chinese_PRC_CS_AS=@UserPwd COLLATE Chinese_PRC_CS_AS)