sqlserver存储过程中SELECT 与 SET 对变量赋值的区别


SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值。
当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法。
下表列出 SET 与 SELECT 的区别。请特别注意红色部分。

set select
同时对多个变量同时赋值 不支持 支持
表达式返回多个值时 出错 将返回的最后一个值赋给变量
表达式未返回值 变量被赋null值 变量保持原值

下面以具体示例来说明问题:
create table chinadba1(
userid int ,
addr varchar(128)
)
go
insert into chinadba1(userid,addr) values(1,'addr1')
insert into chinadba1(userid,addr) values(2,'addr2')
insert into chinadba1(userid,addr) values(3,'addr3')
go

表达式返回多个值时,使用 SET 赋值
declare @addr varchar(128)
set @addr = (select addr from chinadba1)
/*
--出错信息为
服务器: 消息 512,级别 16,状态 1,行 2
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
*/
go
表达式返回多个值时,使用 SELECT 赋值 declare @addr varchar(128)
select @addr = addr from chinadba1
print @addr --结果集中最后一个 addr 列的值
--结果: addr3
go

表达式未返回值时,使用 SET 赋值 declare @addr varchar(128)
set @addr = '初始值'
set @addr = (select addr from chinadba1 where userid = 4 )
print @addr --null值
go

表达式未返回值时,使用 SELECT 赋值 declare @addr varchar(128)
set @addr = '初始值'
select @addr = addr from chinadba1 where userid = 4
print @addr --保持原值
go

需要注意的是,SELECT 也可以将标量子查询的值赋给变量,如果标量子查询不返回值,则变量被置为 null 值。
此时与 使用 SET 赋值是完全相同的
对标量子查询的概念大家应该都觉得陌生,举个例子就能说明
declare @addr varchar(128)
set @addr = '初始值'
--select addr from chinadba1 where userid = 4 为标量子查询语句
select @addr = (select addr from chinadba1 where userid = 4)
print @addr --null值
go



相关阅读:
去掉checkbox边框的方法(css)
js基础:用DHTML中的Popup Object跨框架显示菜单
WordPress制作简单的企业网站
谈谈PHP的输入输出流
greybox——不开新窗口看新的网页
php 远程关机操作的代码
开发人员需要牢记的HTML 5安全问题
Oracle初始参数与当前用户
JAVA/JSP学习系列之七
学习jquery之一
使用JavaScript库还是自己写代码?
DIV+CSS 网页TIP的简单作法
VPS 服务器时间不准确造成的lnmp一键安装包安装失败问题
Firefox插件CSS Usage:一款CSS减肥的工具
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 侯以雷诗歌欣赏902 初中初一作文650字:生活告诉我们生命的宝贵 争当四好少年国旗下讲话 给水工程施工合同 2017大学期末总结 看《购买上帝的男孩》有感作文500字 一串酸葡萄的心声作文 环保节能我为先锋350字 安全把握在你我手中 游泳训练班 组织部长争做学习型干部心得体会 懂得掌握的分寸 【小说】领导艺术 7号冰柜(1)上 蝉蜕作文400字 助学金感谢信_感谢信 善意的谎言 我爱我家--一个和谐的小家庭 李静:释放“她力量” 合作才能成功作文(3篇) 草原弯曲读后感 小学五年级作文350字:蜜蜂与蚂蚁 悲啊作文200字 部队转业复员退伍军人座谈会讲话 机关党员干部践行三严三实演讲稿 幽默的逗语连珠话男女 有关教师节的演讲稿 忠犬八公的故事影评 小学六年级作文300字:假如我是一位老师 关于幼师入党申请书模板 《短歌行》导学案(人教版高一必修二) 天鹅、大虾和梭鱼教学反思 公司个人总结与计划的工作报告_工作报告 学生成绩管理制度 描写心情激动的片段 这就是表达吧 高中高三作文550字:惘然 2014党支部换届选举方案 乐嘉 如果三国有枪炮作文200字 一次与众不同的实验 公司党建工作汇报 年级组长述职报告 万圣节大捣乱作文150字 民办高校国际经济与贸易专业本科课堂教学方式研究 幸福零距离作文 中考满分作文六字经:精米、学艺、文路作文1200字 洗手间里的晚宴 人生短暂,好好活着 关于“感恩”的好词好句 学会放弃,有些人永远不属于自己……

Copyright © 2016 phpStudy |