SQL SERVER 变量赋值
来源:互联网 发布:android系统相册源码 编辑:程序博客网 时间:2024/06/01 09:41
SQL Server中对已经定义的变量赋值的方式用两种,分别是 SET和 SELECT。
对于这两种方式的区别,SQL Server联机丛书中已经有详细的说明,但很多时候我们
并没有注意,其实这两种方式还是有很多差别的。
SQL Server推荐使用 SET而不是 SELECT对变量进行赋值。
当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET方法。
下表列出 SET与 SELECT的区别。请特别注意红色部分。
set
select
同时对多个变量同时赋值
不支持
支持
表达式返回多个值时
出错
将返回的最后一个值赋给变量
表达式未返回值
变量被赋null值
变量保持原值
下面以具体示例来说明问题:
createtable chinadba1(
useridint ,
addrvarchar(128)
)
go
insertinto chinadba1(userid,addr) values(1,'addr1')
insertinto chinadba1(userid,addr) values(2,'addr2')
insertinto 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
- SQL SERVER 变量赋值
- SQL SERVER 变量赋值的方法
- SQL server变量的声明和赋值
- SQL server 动态SQL对变量讲行赋值
- sql 给变量赋值
- PL/SQL 变量赋值
- SQL 变量赋值
- pl/sql 变量赋值
- [SQL Server] 动态sql给变量赋值(或返回值给变量)
- SQL 变量定义 变量赋值 变量显示
- sql 存储过程 变量赋值
- Sql 变量定义、赋值、显示
- PL/SQL之变量赋值
- sql server存储过程中SELECT 与 SET 对变量赋值的区别
- sql server存储过程中SELECT 与 SET 对变量赋值的区别
- [sql server] update中变量的赋值用法 实现分组更新序号
- sql server存储过程中SELECT 与 SET 对变量赋值的区别
- sql server存储过程中SELECT 与 SET 对变量赋值的区别
- SP with parameter
- Sharepoint datetime 支持多个
- linux 单独安装oracle客户端
- Transferring Data Without Draining the Battery - Modifying your Download Patterns Based on the Conne
- UVA 11624 Fire!
- SQL SERVER 变量赋值
- Oracle如何限制固定IP的访问
- 使用icomoon制作icon字体
- OC中字符串创建与字符串处理函数
- you gun shang jia
- android listview的用法
- 为什么你应该(从现在开始就)写博客 --via刘未鹏
- FastJson---高性能JSON开发包
- 《UML精粹》笔记-第一章