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
第20行,第15级,状态1,过程测试,消息102 [批处理开始第5行]
')'附近的语法不正确。消息102,级别15,状态1,过程测试,第27行[批处理开始第5行]
“ END”附近的语法不正确。
编辑:请注意,第一个错误在第二个when语句之前引用了括号。
答案 0 :(得分:2)
您应该使用IF
选择要返回的查询。通过使用CASE
,您将返回标量值而不是数据集。这样的事情应该起作用:
IF @field1 <> '' BEGIN
select <some stuff>
from <table>
where col1 = @field1 and col2 = case when isnull(@field2,-1) = -1
then col2 else @field2 end
END ELSE IF @field3 <> '' BEGIN
select <some stuff>
from <table>
where col3 = @field3
END