【问题标题】:SQL Table Valued Parameter - Default ValueSQL 表值参数 - 默认值
【发布时间】:2015-08-19 18:41:44
【问题描述】:

我将表值参数传递给存储过程以在 where 子句中使用,但我想先检查参数是否已传入。检查这种类型的参数的最佳方法是什么?例如,我希望选择符合以下内容:

SELECT * 
FROM tableName
WHERE
@TVP IS NULL OR RecordID IN (SELECT * FROM @TVP)

【问题讨论】:

  • 你应该看看这篇关于这个话题的文章。 sqlinthewild.co.za/index.php/2009/09/15/…
  • TVP 是一个表,而不是一个变量。你不能说WHERE dbo.tableName IS NULL,所以试试WHERE NOT EXISTS (SELECT 1 FROM @TVP)。此外,您应该命名列而不是说*

标签: sql sql-server query-parameters


【解决方案1】:

如果没有传递表值类型的参数,则它只是一个空表。所以你可以使用:

SELECT * 
FROM tableName
WHERE not exists(select * from @TVP)
    or RecordID IN (SELECT * FROM @TVP)

【讨论】:

  • 好吧,我不建议您费心计数,这需要进行全面扫描,如果 TVP 很大,这可能会很昂贵。
  • 好点...当您的评论弹出时,我正在编辑我的答案。 :)
猜你喜欢
  • 2010-10-03
  • 2016-07-19
  • 2013-04-28
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多