这应该很简单,但由于某种原因,我无法获得适合SQL Server 2008的语法
如果表有列,我需要我的变量为true,否则它应该为false。
截至目前我有这个
DECLARE @LEHasSessions bit
set @LEhasSessions = ((SELECT COUNT(*) FROM @LEForSession) > 0)
显然没有编译。
语法应如何才能使其有效?
答案 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