如何检查空或空的表值参数?

Dan*_*Dan 13 sql-server-2008 null sql-server t-sql table-valued-parameters

我有一个存储过程 (SS2k8),其中包含一些有时为 null 或为空的表值参数。我已经看到这个StackOverflow 帖子说空/空 TVP 应该简单地从调用参数列表中省略。我的问题是我无法弄清楚如何在存储过程中检查空或空值,因为“IF (@tvp IS NULL)”在过程创建时失败,并显示消息“必须声明标量变量“@tvp””。我是否必须在 TVP 上执行 SELECT COUNT(*) 并检查零?

代码摘录:

CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS

IF (@tvp IS NOT NULL) -- doesn't work
BEGIN
  -- lots of expensive processing
END
ELSE
BEGIN
  -- a little bit of cheap processing
END
...
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 18

表不能NULL,TVP 也不能。如何检查表是否为空?你肯定不说IF Sales.SalesOrderHeader IS NULL。:-)

IF EXISTS (SELECT 1 FROM @tvp)
BEGIN
  -- lots of expensive processing
END
ELSE
BEGIN
  -- a little bit of cheap processing
END
...
Run Code Online (Sandbox Code Playgroud)

  • 那么,假设我们想要使用 TVP 选择数据,但如果我们不传递数据,我们希望将其视为无过滤器,那么编写查询的好方法是什么?我们是回到 (value in (select col from @TVP) 还是不存在 (select 1 from @TVP)) ? (2认同)