在 SQL 服务器中使用字符串参数时无法 return 更正查询
Unable to return correct query when using string parameter in SQL Server
我有一个简单的员工table
这是数据
当我尝试 运行 带有字符串参数的查询时,它没有 return 任何东西,尽管它有正确的参数
当我尝试将其更改为双引号 " 时,return出现错误
我错过了什么吗?提前致谢
您的第一个查询是正确的。问题是数据。 empid
字段中有 '10002'
以外的内容。您可以通过多种方式对此进行调查:
select length(empid), '|' + empid + '|'
from employee
这将提供有关您可能看不到的意外字符的信息。该字段的长度应为 6。第二列的输出应为“|100002|”。
如果字段开头或结尾的额外字符是问题所在,则:
where empid = '%100002%'
问题解决。但是,存在很大的潜在性能差异,因为此查询无法利用主键索引。所以,你想修复数据。
您可能将字母 0 与数字混淆,或者将大写 "I" 或小写 "l" 与 1 混淆。这些可能更难识别,但您可以使用 lower()
upper()
帮助发现此类问题。
您可以在值的末尾有一个特殊的字符,例如回车 return。
使用下面的查询来检查您的 table.
中是否存在这些情况
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。
您只需将 empId 列的数据类型更改为 Int 而不是 varchar。
我有一个简单的员工table
这是数据
当我尝试 运行 带有字符串参数的查询时,它没有 return 任何东西,尽管它有正确的参数
当我尝试将其更改为双引号 " 时,return出现错误
我错过了什么吗?提前致谢
您的第一个查询是正确的。问题是数据。 empid
字段中有 '10002'
以外的内容。您可以通过多种方式对此进行调查:
select length(empid), '|' + empid + '|'
from employee
这将提供有关您可能看不到的意外字符的信息。该字段的长度应为 6。第二列的输出应为“|100002|”。
如果字段开头或结尾的额外字符是问题所在,则:
where empid = '%100002%'
问题解决。但是,存在很大的潜在性能差异,因为此查询无法利用主键索引。所以,你想修复数据。
您可能将字母 0 与数字混淆,或者将大写 "I" 或小写 "l" 与 1 混淆。这些可能更难识别,但您可以使用 lower()
upper()
帮助发现此类问题。
您可以在值的末尾有一个特殊的字符,例如回车 return。 使用下面的查询来检查您的 table.
中是否存在这些情况 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。
您只需将 empId 列的数据类型更改为 Int 而不是 varchar。