SELECT COUNT(*)>进入变量T-SQL

时间:2013-12-29 19:03:32

标签: sql-server-2008 tsql

这应该很简单,但由于某种原因,我无法获得适合SQL Server 2008的语法

如果表有列,我需要我的变量为true,否则它应该为false。

截至目前我有这个

DECLARE @LEHasSessions bit

set @LEhasSessions = ((SELECT COUNT(*) FROM @LEForSession) > 0)

显然没有编译。

语法应如何才能使其有效?

3 个答案:

答案 0 :(得分:5)

SQL Server没有布尔数据类型。请改用CASE X THEN 1 ELSE 0

最好在这里使用EXISTS而不是COUNT,这样它就可以在读取第一行后停止处理(而不是计算表中的所有行)。

SET @LEHasSessions = CASE
                       WHEN EXISTS(SELECT *
                                   FROM   @LEForSession) THEN 1
                       ELSE 0
                     END 

答案 1 :(得分:3)

实际上你可以将@LEHasSessions设置为COUNT(*)的输出。输出将被截断为目标数据类型的最大允许值。因此对于BIT,即使值522078也会截断为1,0将为0.

使用(SELECT TOP 1 * FROM @LEForSession)而不是直接从表中选择是必要的,以满足性能问题,因为它减少了从扫描整个表到扫描表的一页的一个记录的逻辑读取。

DECLARE @LEHasSessions BIT;

SELECT @LEhasSessions = COUNT(*) 
FROM (SELECT TOP 1 * FROM @LEForSession) a
;

PRINT @LEHasSessions;

答案 2 :(得分:0)

select @LEhasSessions = case when COUNT(*) > 0 then 1 else 0 end 
FROM @LEForSession