0

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

ID, int
Name, nvarchar(100)

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

  1. ID 列正是 @Search
  2. Name-Column 包含@Search。

目前,我在存储过程中的选择看起来像这样:

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 时转换失败。

我怎样才能解决这个问题?

提前致谢

拉斐

4

1 回答 1

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)
于 2011-08-18T09:03:22.893 回答