这是我的一个存储过程的一部分:
@dataInTable dbo.Table_Variable readonly,
....
AND (
( @dataInTable IS NULL )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
@dataInTable IS NULL
的语法错误,错误信息为:
必须声明标量变量“@dataInTable”。
因此我将其更改为:
(SELECT T FROM @dataInTable) IS NULL
这个方法可以工作,但如果@dataInTable
中有多个项目,我会收到以下错误提示:
子查询返回了多个值。当子查询跟随=、!=、<、<=、>、>=时,或者当子查询用作表达式时,不允许这样做。
这是可以理解的,所以我将其更改为:
(SELECT TOP(1) T FROM @ProgramRatings) IS NULL
功能完美,我所关注的是性能问题。
我在想是否有一种更简单的方法来检查表变量是否为空,例如
AND (
( @dataInTable IS EMPTY )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
EXISTS
比COUNT
更有效率,因为它在找到第一行后就停止执行了。 - Martin SmithSELECT
中使用它,那么你可能正在寻找CASE
。根据你目前发布的片段,很难知道你在做什么。 - Martin Smithexists
来替换你在问题中所发布的内容:如果@dataInTable
为空,则将@dataInTable IS EMPTY
替换为exists (select 1 from @dataInTable)
。如果不是这种情况,你应该在问题中添加更多的上下文... - Factor Mystic