Eri*_*Yin 12 t-sql sql-server null table-variable
这是我的一个存储过程的一部分:
@dataInTable dbo.Table_Variable readonly,
....
AND (
( @dataInTable IS NULL )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
Run Code Online (Sandbox Code Playgroud)
@dataInTable IS NULL 语法错误,错误是
必须声明标量变量"@dataInTable"
所以我把它改成:
(SELECT T FROM @dataInTable) IS NULL
Run Code Online (Sandbox Code Playgroud)
这有效,但如果@dataInTable有多个项目,我收到一个错误:
子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.
可以理解,所以我把它改成:
(SELECT TOP(1) T FROM @ProgramRatings) IS NULL
Run Code Online (Sandbox Code Playgroud)
完美的工作,我所拥有的是性能问题.
我想知道,如果有更简单的方法来检查表变量是否为空,比如
AND (
( @dataInTable IS EMPTY )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
Run Code Online (Sandbox Code Playgroud)
Phi*_*ein 27
表变量与标量变量不同,因此@dataInTable IS NULL不允许如您所述.我建议如下:
EXISTS (SELECT 1 FROM @dataInTable)
Run Code Online (Sandbox Code Playgroud)
如果您真的想知道计数,以下内容也可能对您的情况有意义:
DECLARE @dataCount int = (SELECT COUNT(1) FROM @dataInTable)
IF @dataCount = 0 -- Empty
Run Code Online (Sandbox Code Playgroud)
Fac*_*tic 11
永远都有exists.
例如:
select 'Yep'
where exists (select 1 from @dataInTable)
Run Code Online (Sandbox Code Playgroud)
要检查表变量是否为空,只需使用其他人已经提到的EXISTS,
但
如果你将空集与未知集相区别 - 那么你别无选择 - 你必须引入额外的变量,指出空集是真空还是未知.
declare @dataInTableIsUnknown BIT
...
AND (
( @dataInTableIsUnknown = 1 )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27806 次 |
| 最近记录: |