T-SQL 条件AND语句
T-SQL conditional AND statement
我正在尝试设置一个存储过程,在其中接收 table 值参数并在 IN 语句中使用它来获取结果,问题是 table value 参数可以为空,请问有没有办法有条件地插入一个完整的 and 语句?
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)
这就是我在概念上想要做的,有什么正确的方法可以帮助我吗?
按照你的逻辑,你真的只需要括号:
WHERE t.foo4 = @var OR
(NOT EXISTS (SELECT 1 FROM @tvp) OR
t.foo1 IN (SELECT @tvp.foo1 FROM @tvp)
)
此版本假设即使@tvp 为空,结果仍应返回。它说 @tvp 为空或 t.foo1 在 @tvp.
WHERE t.foo4 = @var AND
(
NOT EXISTS (SELECT 1 FROM @tvp)
OR t.foo1 IN (SELECT @tvp.foo1 FROM @tvp)
)
declare @var int
--insert @var
declare @tvp tvp
--insert stuff (or not) into @tvp
declare @tvpCount int = select count(*) from @tvp
SELECT distinct t.foo1, t.foo2, t.foo3
FROM dbo.t t
join tvp
on t.foo4 = @var
and ( @tvpCount = 0 or t.foo1 = @tvp.foo1 )
我正在尝试设置一个存储过程,在其中接收 table 值参数并在 IN 语句中使用它来获取结果,问题是 table value 参数可以为空,请问有没有办法有条件地插入一个完整的 and 语句?
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)
这就是我在概念上想要做的,有什么正确的方法可以帮助我吗?
按照你的逻辑,你真的只需要括号:
WHERE t.foo4 = @var OR
(NOT EXISTS (SELECT 1 FROM @tvp) OR
t.foo1 IN (SELECT @tvp.foo1 FROM @tvp)
)
此版本假设即使@tvp 为空,结果仍应返回。它说 @tvp 为空或 t.foo1 在 @tvp.
WHERE t.foo4 = @var AND
(
NOT EXISTS (SELECT 1 FROM @tvp)
OR t.foo1 IN (SELECT @tvp.foo1 FROM @tvp)
)
declare @var int
--insert @var
declare @tvp tvp
--insert stuff (or not) into @tvp
declare @tvpCount int = select count(*) from @tvp
SELECT distinct t.foo1, t.foo2, t.foo3
FROM dbo.t t
join tvp
on t.foo4 = @var
and ( @tvpCount = 0 or t.foo1 = @tvp.foo1 )