• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SQL Server中使用set和select赋值时一些比较区别

mysql 搞代码 4年前 (2022-01-09) 30次浏览 已收录 0个评论

SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT。对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种方式还是有很多差别的。

SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值。
当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法。

下表列出 SET 与 SELECT 的区别。请特别注意红色部分。

代码如下复制代码

/****************** 场景布置 ******************/
DROP TABLE #
CREATE TABLE #(OrderId INT)
INSERT #(OrderId) VALUES(1)
INSERT #(OrderId) VALUES(2)

/****************** 角色上场 ******************/
—–角色1:
DECLARE @id INT
SET @id=100
SET @id=(SELECT ISNULL(OrderId,0) FROM # WHERE OrderId=1000000000)
SELECT @id
–结果为NULL, 因为不存在OrderId为1000000000的单号,所以为NULL

—–角色2:
DECLARE @id INT
SET @id=100
SELECT @id=ISNULL(OrderId,0) FROM # WHERE OrderId=1000000000
SELECT @id
–结果为100, 因为不存在OrderId为1000000000的单号,所以执行SELECT @id=…未能给@id赋值

—–角色3:
DECLARE @id INT
SET @id=100
SELECT @id=OrderId FROM #– ORDER BY OrderId DESC
SELECT @id
–结果为2, 执行SELECT @id=…将返回结果的最后一个值给@id

实例

为说明其差别,建立一张数据表,插入几条数据

代码如下复制代码

create table tblStudent
(
id nvarchar(10) primary key,
name nvarchar(21)not null,
)

insert into tblStudent(id,name) values(‘2008110101′,’张三’);
insert into tblStudent(id,name) values(‘2008110102′,’李四’);
insert into tblStudent(id,name) values(‘2008110103′,’李四’);

1.select可以同时给多个变量赋值,set只能给一个变量赋值

情况1:

代码如下复制代码

declare @variable1 int,@variable2 int
select @variable2=1,@variable2=2
set @variable1=1,@variable2=2报错

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near ‘,’.

情况2:

declare @variable1 int,@variable2 int
set @variable2=1
set @variable2=2
select @variable1=1,@variable2=2 正常通过

Command(s) completed successfully

.

2.当返回值为多行时,select不会出错,set要报错

代码如下复制代码

declare @id nvarchar(10)
print ‘set赋多返回值:’
set @id=(select id from tblStudent1 where name=’李四’)
print ‘set后的值为:’+@id –由于姓名为李四的人有两个,所以用set赋值会报错

print ‘set赋多返回值:’
select @id=id from tblStudent1 where name=’李四’
print ‘set后的值为:’+@id –用select赋值则不会报错结

错误码中Subquery returned more than 1 value.(即子查询返回超过一个值)

3.当无返回值时,set不为变量赋值,select赋值为NULL

代码如下复制代码

–使用set赋空返回值
DECLARE @id varchar(10)
SET @id = ‘无值’

SET @id =
(
SELECT id
FROM dbo.tblStudent
WHERE id = ‘**********’
)
–使用set赋值时,当查询无返回值时就为变量赋值为NULL
SELECT @id as setResult
GO

–使用select赋空返回值
DECLARE @id varchar(10)
SET @id = ‘无值’

SELECT @id = name
FROM dbo.tblStudent
WHERE id = ‘**********’

本文来源gaodaimacom搞#^代%!码&网*–使用select赋值时,当查询无返回值时就不为变量赋值,变量保持以前的值即’无值’
SELECT @id as selectResult
GO


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SQL Server中使用set和select赋值时一些比较区别

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址