首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL条件和语句

T-SQL条件和语句
EN

Stack Overflow用户
提问于 2015-04-24 12:08:06
回答 3查看 527关注 0票数 3

我试图设置一个存储过程,其中我接受一个表值参数,并在in语句中使用它来获取结果,问题是表值参数可以是空的,有条件地插入一个完整和语句吗?

代码语言:javascript
复制
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)

这就是我在概念上要做的,在正确的方法上有什么帮助吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-24 12:19:52

这个版本假设即使@tvp为空,仍然应该返回结果。它说@tvp要么是空的,要么t.foo1是IN @tvp。

代码语言:javascript
复制
WHERE t.foo4 = @var AND
(  
    NOT EXISTS (SELECT 1 FROM @tvp) 
    OR t.foo1 IN (SELECT @tvp.foo1 FROM @tvp)
)
票数 3
EN

Stack Overflow用户

发布于 2015-04-24 12:09:44

按照您的逻辑,您只需要括号:

代码语言:javascript
复制
WHERE t.foo4 = @var OR
      (NOT EXISTS (SELECT 1 FROM @tvp) OR
       t.foo1 IN (SELECT @tvp.foo1 FROM @tvp)
      )
票数 4
EN

Stack Overflow用户

发布于 2015-04-24 14:26:15

代码语言:javascript
复制
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 )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29847165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档