下表列出 set 與 select 的區別
select
set同時對多個變數同時賦值時支援
不支援表示式返回多個值時
將返回的最後乙個值賦給變數
出錯表示式未返回值
時變數保持原值
變數被賦null值
(1).同時對多個變數同時賦值時
declare @a varchar(128), @b varchar(128)
set @a='abc',@b='efg'
go --報錯:訊息 102,級別 15,狀態 1,第 3 行 ',' 附近有語法錯誤。
declare @a varchar(128), @b varchar(128)
select @a='abc',@b='efg'
go --正確執行
(2).表示式返回多個值時
在說明這一項前我們先建立乙個要用到的表,並對其賦值,**如下:
create table fuzhitest(
id int ,
name varchar(128))go
insert into fuzhitest(id,name) values(1,'name1')
insert into fuzhitest(id,name) values(2,'name2')
insert into fuzhitest(id,name) values(3,'name3')
go
declare @name varchar(128)
set @name = (select name from fuzhitest)
go --報錯:訊息 512,級別 16,狀態 1,第 2 行
子查詢返回的值不止乙個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表示式時,這種情況是不允許的。
declare @name varchar(128)
select @name =name from fuzhitest
print @name
go --正確執行:顯示 name3
(3).表示式未返回值時
declare @name varchar(128)
set @name = 'set初始值'
set @name = (select name from fuzhitest where id = 4 )
print @name
go --正確執行:顯示null
declare @name varchar(128)
set @name = 'select初始值'
select @name =name from fuzhitest where id = 4
print @name --正確執行:顯示 select初始值
go注意:select 也可以將標量子查詢的值賦給變數,如果標量子查詢不返回值,則變數被置為 null 值(此時與使用 set 賦值是完全相同的
)。declare @name varchar(128)
set @name = 'select初始值'
select @name =(select name from fuzhitest where id = 4 )
print @name --正確執行:顯示null
go原文:
基於SQL中SET與SELECT賦值的區別詳解
最近的專案寫的sql比較多,經常會用到對變數賦值,而我使用set和select都會達到效果。那就有些迷惑,這兩者有什麼區別呢?什麼時候哪該哪個呢?經過網上的查詢,及個人練習,總結兩者有以下幾點主要區別 假定有設定變數 複製 如下 declare var1 varchar 1 declare var2...
sql中 set 和select 的區別
sql server 中對已經定義的變數賦值的方式用兩種,分別是 set 和 select。對於這兩種方式的區別,sql server 聯機叢書中已經有詳細的說明,但很多時候我們 並沒有注意,其實這兩種方式還是有很多差別的。sql server推薦使用 set 而不是 select 對變數進行賦值。...
sql語句對變數賦值 select與set的區別
sql server推薦使用 set 而不是 select 對變數進行賦值。當表示式返回乙個值並對乙個變數進行賦值時,推薦使用 set 方法。下表列出 set 與 select 的區別。請特別注意紅色部分。set select 同時對多個變數同時賦值 不支援 支援 表示式返回多個值時 出錯 將返回的...