我有一个简单的员工表
这是数据
当我尝试使用字符串参数运行查询时,尽管它具有正确的参数
,但它不会返回任何内容
当我尝试将其更改为双引号时,它会返回错误
我错过了什么吗?提前致谢
答案 0 :(得分:2)
您的第一个查询是正确的。问题是数据。 empid
字段在字段中具有'10002'
以外的内容。您可以通过各种方式对此进行调查:
select length(empid), '|' + empid + '|'
from employee
这将提供有关您可能看不到的意外字符的信息。字段的长度应为6.第二列的输出应为" | 100002 |"。
如果字段的开头或结尾有一个额外的字符,那么:
where empid = '%100002%'
解决了这个问题。但是,存在很大的潜在性能差异,因为此查询无法利用主键索引。所以,你想要修复数据。
你可能把字母零与数字或资本混淆了#34;我"或小写" l"对于1.这些可能更难发现,但您可以使用lower()
和upper()
来帮助查找此类问题。
答案 1 :(得分:0)
您可以在值的末尾添加特殊字符,例如回车符。 使用下面的查询来检查表格中是否存在某些案例。
SELECT
EmpId,
-- convert(int, EmpId) AS EmpId_INT,
LEN(EmpId) AS Len_EmpId
FROM
Employee
-- WHERE
-- LEN(EmpId) <> LEN(convert(int, EmpId))
ORDER BY
EmpId
如果不是强制性的,我建议将“EmpId”数据类型更改为int。
答案 2 :(得分:0)
您只需将empId列的数据类型更改为Int而不是varchar。