关于使用select语句对变量赋值的注意事项
2016-01-26 11:15
471 查看
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
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
相关文章推荐
- Shell 脚本编程陷阱
- VBS脚本写的Windows硬件检测工具分享
- 用vbscript实现隐藏任务栏图标的脚本
- 用autoit编写第一个脚本(Hello World)
- VBS调用WMI快速关闭IE的脚本
- Oracle数据库执行脚本常用命令小结
- 收集的ROS防火墙脚本
- JSP脚本漏洞面面观
- 不错的批处理脚本 第一部分
- 推荐Sql server一些常见性能问题的解决方法
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- 不错的批处理脚本实例代码 第二部分
- 使用脚本和批处理清除电脑中的痕迹的代码第1/2页
- 让你的脚本说话
- Lua编程示例(一):select、debug、可变参数、table操作、error
- Lua脚本获取喜马拉雅MP3音频地址
- SQL学习笔记三 select语句的各种形式小结
- 一条select语句引起的瓶颈问题思考
- SQL Select语句完整的执行顺序