在SQL Server中使用字符串参数时无法返回正确的查询

时间:2015-03-02 10:55:34

标签: sql sql-server-2012

我有一个简单的员工表

employee table

这是数据

employee table data

当我尝试使用字符串参数运行查询时,尽管它具有正确的参数

,但它不会返回任何内容

query with correct string parameter

当我尝试将其更改为双引号时,它会返回错误

query enclosed parameter with "" for string parameters

我错过了什么吗?提前致谢

3 个答案:

答案 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。