我正在使用T-SQL进行查询。
目标:返回包含存储在变量中的名称的行。
我的问题:查询会返回所有行,而不进行过滤。
其他信息:名称存储为varchar
,字母后面有几个空格,这就是为什么我要将变量与'%'连接起来。
此外,当我在变量末尾附加一个'%'运行查询时,数据库返回所有以'D'开头的记录。
我的查询:
DECLARE @fName as varchar;
SET @fName='DILLON';
SELECT DISTINCT
e.FIRST_NAME, e.LAST_NAME, e.EMAIL_ADDRESS
FROM
[172.20.11.11].LSLMDB.dbo.vwEmployee e
JOIN
[172.20.11.11].LSLMDB.ls_apps.PAEMPLOYEE pa ON pa.EMPLOYEE = e.EMPLOYEE
JOIN
[172.20.11.11].LSLMDB.ls_apps.PCODES pc ON pa.LOCAT_CODE = pc.CODE
JOIN
[172.20.11.11].LSLMDB.ls_apps.PCODESDTL pcd ON pc.CODE = pcd.CODE
WHERE
e.FIRST_NAME LIKE CONCAT('%',@fName,'%');
我感谢任何帮助的尝试!
答案 0 :(得分:3)
问题是系统默认为DECLARE @fName as varchar(1)
- 这可能不是你想要的。更改为DECLARE @fName as varchar(100);
这应该按预期工作。
查询返回所有行,不进行过滤。
否它返回包含D
的所有行。根据联合设置,这可能包括大写和小写匹配
此外,当我在变量末尾附加一个'%'运行查询时,数据库返回所有以'D'开头的记录。
由于它只是一个字符,因此过滤器变为D%
,它将返回以D开头的所有记录。