SQL中select與set的區別

2021-06-26 22:21:15 字數 1673 閱讀 7498



下表列出 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 同時對多個變數同時賦值 不支援 支援 表示式返回多個值時 出錯 將返回的...