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

Posted

技术标签:

【中文标题】MSSQL 存储过程:如果 ISNUMERIC,则将参数与列进行比较【英文标题】:MSSQL Stored Procedure: Compare Parameter with Column if ISNUMERIC 【发布时间】:2011-08-18 08:56:49 【问题描述】:

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

ID, int
Name, nvarchar(100)

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

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

我该如何解决这个问题?

提前致谢

拉斐

【问题讨论】:

【参考方案1】:
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)

【讨论】:

有些东西不行:如果参数是十进制值,“132.4”,ISNUMERIC返回1,但是CAST to INT失败。

以上是关于MSSQL 存储过程:如果 ISNUMERIC,则将参数与列进行比较的主要内容,如果未能解决你的问题,请参考以下文章

MSSQL更新数据,某主键存在则更新,不存在则插入

mssql 语句判断,存储过程最好

oracle存储过程中临时表的使用,该怎么处理

mssql 里面存储过程插入了条数据之后的返回

Mysql如何ISNUMERIC()可用?

MSSQL 2005 存储过程中最大的文本可用变量?