好的,所以我正在尝试创建一个包含条件 WHERE 子句的存储过程。它使用初始化为 NULL 的命名参数,然后根据在调用语句时它们是否仍然为 null 或者它们是否具有值来确定是否将它们添加到 WHERE 语句中。
该语句的一个示例是:
CREATE PROCEDURE Sp_myconditionalproc (@xVariable VARCHAR(10) = NULL,
@yVariable VARCHAR(50) = NULL)
AS
BEGIN
SELECT *
FROM [MyDB].[dbo].[MYTABLE]
WHERE X = CASE
WHEN @xVariable <> NULL THEN @xVariable
ELSE X
END
AND Y = CASE
WHEN @yVariable <> NULL THEN @yVariable
ELSE Y
END
END
然后它被称为使用
EXECUTE Sp_myconditionalproc
@xVariable = 'C',
@yVariable = 'AB';
出于某种原因,这不会返回我期望的结果。它不会给我 xVariable 为“C”的结果,而是给我所有结果,而不管 xVariable 是什么。与 xVariable 相同。基本上 - 无论我放什么,都会返回整个表。
这是我第一次尝试这样的事情,所以我可能在那里有一些巨大的漏洞,但我不知道它是什么。有人可以帮助我弄清楚我在这里做错了什么以及如何纠正它,这样我就可以只传递我想要搜索的变量吗?
谢谢!=D