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都能得到结果,怎样才能实现密码严格匹配区分大小写呢?
@UserPwd nvarchar(12)
AS
/*验证用户密码*/
SELECT UserPwd
FROM B_Employee
WHERE (ID = @ID) AND (UserPwd=@UserPwd)ID和UserPwd是B_Employee表里的俩个列这样写密码不区分大小写,用ABC和abc都能得到结果,怎样才能实现密码严格匹配区分大小写呢?
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 )
--测试数据
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
@UserPwd nvarchar(12) AS
/*验证用户密码*/
SELECT UserPwd
FROM B_Employee
WHERE (ID = @ID) AND (UserPwd=@UserPwd)
COLLATE Chinese_PRC_CS_AS
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(简体中文)字符集。
用上面的代码报错,说collate附近有语法错误!
@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)
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)