我正在尝试设置一个存储过程,我在其中接收表值参数并在 IN 语句中使用它来获取结果,问题是表值参数可以为空,有没有办法让我有条件地插入整个和语句?
declare @var int
--insert @var
declare @tvp tvp
--insert stuff (or not) into @tvp
SELECT t.foo1, t.foo2, t.foo3
FROM dbo.t t
WHERE t.foo4 = @var
IF(EXIST (SELECT 1 FROM @tvp))
AND t.foo1 IN (SELECT @tvp.foo1 FROM @tvp)
这就是我在概念上要做的,对正确的方法有什么帮助吗?
最佳答案
此版本假设即使@tvp 为空,结果仍应返回。它说 @tvp 要么是空的,要么 t.foo1 是 IN @tvp。
WHERE t.foo4 = @var AND
(
NOT EXISTS (SELECT 1 FROM @tvp)
OR t.foo1 IN (SELECT @tvp.foo1 FROM @tvp)
)
关于sql-server - T-SQL 条件 AND 语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29847165/