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

发布于 2024-11-30 08:05:17 字数 569 浏览 4 评论 0原文

我有下表“Managers”(简化):

ID, int
Name, nvarchar(100)

在具有一个参数(“Search”,类型 nvarchar)的存储过程中,我想选择

  1. ID 列恰好是 @Search OR
  2. 名称列包含@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 时转换失败。

我该如何解决这个问题?

预先感

谢拉菲

I have following table "Managers" (simplified):

ID, int
Name, nvarchar(100)

In a stored procedure that has one argument ("Search", type nvarchar), I want to select every row where

  1. The ID-Column is exactly @Search OR
  2. The Name-Column contains @Search.

At the moment, my select in the stored procedure looks something like this:

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

If I call the stored procedure with @Search = 1321 (example), the select works.

But if I have a @Search - parameter that is not numeric (example "HES"), I get the following error:
Conversion failed when converting the nvarchar value 'HES' to data type int.

How can I fix this?

Thanks in advance

Raphi

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

香草可樂 2024-12-07 08:05:17
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)
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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文