sqlserver存儲進程中SELECT 與 SET 對變量賦值的差別。本站提示廣大學習愛好者:(sqlserver存儲進程中SELECT 與 SET 對變量賦值的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是sqlserver存儲進程中SELECT 與 SET 對變量賦值的差別正文
SQL Server推舉應用 SET 而不是 SELECT 對變量停止賦值。
當表達式前往一個值並對一個變量停止賦值時,推舉應用 SET 辦法。
下表列出 SET 與 SELECT 的差別。請特殊留意白色部門。
上面以詳細示例來講明成績:
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