MSSQL存储过程:如果是ISNUMERIC,则将参数与列进行比较

时间:2011-08-18 08:56:50

标签: sql-server casting compare isnumeric

我有下表“经理”(简化):

ID, int
Name, nvarchar(100)

在一个有一个参数的存储过程中(“搜索”,输入nvarchar),我想选择每一行

  1. ID列完全是@Search OR
  2. 名称栏包含@Search。
  3. 目前,我在存储过程中的选择看起来像这样:

    SELECT ID, Name FROM Managers WHERE
    (ISNUMERIC(@Search) = 1 AND [ID] = CAST(@Search AS INT)) Or
    Contains([Name], @Search)
    

    如果我使用@Search = 1321(示例)调用存储过程,则选择有效。

    但如果我的@Search - 参数不是数字(例如“HES”),我会收到以下错误: 将nvarchar值'HES'转换为数据类型int时,转换失败。

    我该如何解决这个问题?

    提前致谢

    Raphi

1 个答案:

答案 0 :(得分:0)

SELECT ID, Name FROM Managers
WHERE [ID] = CASE
               WHEN ISNUMERIC(@Search) = 1 AND @Search NOT LIKE '%.%' THEN CAST(@Search AS INT)
               ELSE -1
             END
OR Contains([Name], @Search)