集团, 我正在尝试使用一个变量@Customer 创建一个存储过程。我想要做的是在 WHERE 子句中添加一些内容,说明如果它是数字,则搜索 CustomerID 字段,其中输入的数字为 LIKE CustomerID... 如果输入字符,则搜索 CustomerName 字段,其中输入的文本为 LIKE CustomerName。以下是我正在尝试做的事情的示例:
CREATE PROCEDURE [dbo].[uspGetCustomer] (@Customer VARCHAR(100))
AS
SET NOCOUNT ON
SELECT *
FROM dbo.Customers
WHERE CASE WHEN ISNUMERIC(@Customer) THEN CustomerID LIKE @Customer + '%'
ELSE CustomerName LIKE @Customer + '%' END
有什么建议吗?
最佳答案
我会使用 IF 语句来完成此操作,因为将该逻辑放在 WHERE 中会导致稍后难以阅读:
DECLARE @match = @CustomerID + '%'
IF ISNUMERIC(@CustomerID) = 1
BEGIN
SELECT * FROM CUSTOMERS WHERE CustomerID LIKE @match
END ELSE BEGIN
SELECT * FROM CUSTOMERS WHERE CustomerNAME LIKE @match
END
更新: 我想知道 CustomerID 字段是否是 INT。如果是这样,那么我会像这样更改查询(并删除 @match 变量):
... WHERE CustomerID = Cast(@CustomerID as INT) --if numeric
... WHERE CustomerNAME = @CustomerID + '%' --if not numeric
但是,如果它是一些奇怪的 VARCHAR 字段,以数字开头并以其他数据结尾(例如“11_blah”),那么 LIKE 加通配符就可以正常工作
关于sql - 存储过程 WHERE LIKE ID 或 NAME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1903950/