【发布时间】:2017-06-15 02:46:05
【问题描述】:
我有一个接受可选@ID 参数的存储过程。当参数传入时,我希望 WHERE 语句包含类似 id = @ID 的内容,否则,当 @ID 为空时,我不希望它被过滤。
例如:
@ID BIGINT = NULL
SELECT * from myTable
WHERE
CASE
WHEN @ID IS NOT NULL THEN mytable.id = @ID
END
我在 SQL Server 2016 中运行它,它在 mytable.id = @ID 附近显示错误的语法。可以以这种方式使用 CASE 还是应该为此尝试不同的 SQL 方法?
我认为实现此目的的唯一其他选择是在我的存储过程中使用 IF 条件,但根据我的搜索,这似乎也不可能。
【问题讨论】:
-
你能把你的查询改成@ID BIGINT = NULL SELECT * from myTable WHERE @ ID IS NULL or mytable.id = @ ID
标签: sql sql-server case