【发布时间】:2019-04-10 05:36:40
【问题描述】:
BEGIN
SELECT
CASE
WHEN @field1 != ''
THEN (SELECT <some stuff>
FROM <table>
WHERE col1 = @field1
AND col2 = CASE WHEN ISNULL(@field2, -1) = -1
THEN col2 ELSE @field2 END)
WHEN @field3 != ''
THEN (SELECT <some stuff>
FROM <table>
WHERE col3 = @field3)
END
我已经从上面开始了一个存储过程。这个想法是您可以搜索多个列,因此大多数数据不会出现在给定的搜索中。我正在尝试根据随值传递的参数创建不同的搜索。我从these 答案之一中获取了上述通用语法,但出现以下错误。
显然我做错了什么,如果重要的话,这是 SQL Server 2017
消息 102,级别 15,状态 1,程序测试,第 20 行 [批处理开始第 5 行]
')' 附近的语法不正确。消息 102,级别 15,状态 1,程序测试,第 27 行 [批处理开始第 5 行]
'END' 附近的语法不正确。
编辑:快速注意第一个错误在第二个 when 语句之前引用了括号
【问题讨论】:
-
CASE 是一个表达式,用于确定要返回的标量值。 IF用于控制流量。您应该在这里使用 IF 语句,而不是 case 表达式。
-
了解如何使用
CASE。SELECT CASE WHEN...THEN SELECT ...肯定不行。 -
感谢您的帮助!请在引用的问题中解释答案。这就是最受欢迎的答案正在做的事情。
标签: sql sql-server case