DECLARE @a TABLE (
id INT
)
INSERT INTO @a
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
DECLARE @tt INT=0
SELECT
@tt=CASE WHEN id=1 THEN
1
ELSE
0
END
FROM @a
WHERE id=4
PRINT @tt
赋值时,要考虑以下可能场景:
1、select查询有结果
变量值为select查询返回结果
2、select查询无结果
变量值不会改变,即变量原始值是什么,就是什么,这一点是和set赋值有区别的。
如:上面的查询,@tt的值为0,而不会是null;
但是如果用set,则结果将会是null,即赋值一定会被执行,如下面脚本:
DECLARE @a TABLE (
id INT
)
INSERT INTO @a
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
DECLARE @tt INT=0
--SELECT
-- @tt=CASE WHEN id=1 THEN
-- 1
-- ELSE
-- 0
-- END
--FROM @a
--WHERE id=4
SET @tt=
(SELECT
CASE WHEN id=1 THEN
1
ELSE
0
END
FROM @a
WHERE id=4)
PRINT @tt
这个@tt的值将会变成null