基于SQL中SET與SELECT賦值的區(qū)別詳解
更新時(shí)間:2013年06月05日 17:25:24 作者:
本篇文章是對(duì)SQL中SET與SELECT賦值的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
最近的項(xiàng)目寫的SQL比較多,經(jīng)常會(huì)用到對(duì)變量賦值,而我使用SET和SELECT都會(huì)達(dá)到效果。
那就有些迷惑,這兩者有什么區(qū)別呢?什么時(shí)候哪該哪個(gè)呢?
經(jīng)過網(wǎng)上的查詢,及個(gè)人練習(xí),總結(jié)兩者有以下幾點(diǎn)主要區(qū)別:
假定有設(shè)定變量:
DECLARE @VAR1 VARCHAR(1)
DECLARE @VAR2 VARCHAR(2)
1、SELECT可以在一條語句里對(duì)多個(gè)變量同時(shí)賦值,而SET只能一次對(duì)一個(gè)變量賦值,如下:
SELECT @VAR1='Y',@VAR2='N'
-- 而SET要達(dá)到同樣的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'
/*
說到這個(gè),SQL內(nèi)置的變量:@@ERROR 和 @@ROWCOUNT必須要在一句SQL語句中捕獲。如果用set分兩句來獲取它們,將獲取不完整,這時(shí)就應(yīng)該用select來獲取值。
*/
2、表達(dá)式返回多個(gè)值時(shí),用SET將會(huì)出錯(cuò),而SELECT將取最后一個(gè)值,如下:
----以下假定Permission表有多個(gè)IsRight記錄
SELECT @VAR1 = IsRight FROM Permission --將取最后一個(gè)值
SET @VAR1 = IsRight FROM Permission --將報(bào)錯(cuò)
3、表達(dá)式無返回值時(shí),用SET將置變量值為NULL,用SELECT交保持變量值,如下:
----以下假定Permission記錄為空
SET @VAR1 = '初始值'
SELECT @VAR1 = IsRight FROM Permission --此時(shí)@VAR1為'初始值'
SET @VAR1 = (SELECT IsRight FROM Permission) --此時(shí)@VAR1為NULL
4、使用標(biāo)量子查詢時(shí),如果無返回值,SET和SELECT一樣,都將置為NULL,如下:
----以下假定Permission記錄為空
SET @VAR1 = '初始值'
SELECT @VAR1 =(SELECT IsRight FROM Permission ) --此時(shí)@VAR1為NULL
SET @VAR1 = ( SELECT IsRight FROM Permission) --此時(shí)@VAR1為NULL
那就有些迷惑,這兩者有什么區(qū)別呢?什么時(shí)候哪該哪個(gè)呢?
經(jīng)過網(wǎng)上的查詢,及個(gè)人練習(xí),總結(jié)兩者有以下幾點(diǎn)主要區(qū)別:
假定有設(shè)定變量:
復(fù)制代碼 代碼如下:
DECLARE @VAR1 VARCHAR(1)
DECLARE @VAR2 VARCHAR(2)
1、SELECT可以在一條語句里對(duì)多個(gè)變量同時(shí)賦值,而SET只能一次對(duì)一個(gè)變量賦值,如下:
復(fù)制代碼 代碼如下:
SELECT @VAR1='Y',@VAR2='N'
-- 而SET要達(dá)到同樣的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'
/*
說到這個(gè),SQL內(nèi)置的變量:@@ERROR 和 @@ROWCOUNT必須要在一句SQL語句中捕獲。如果用set分兩句來獲取它們,將獲取不完整,這時(shí)就應(yīng)該用select來獲取值。
*/
2、表達(dá)式返回多個(gè)值時(shí),用SET將會(huì)出錯(cuò),而SELECT將取最后一個(gè)值,如下:
復(fù)制代碼 代碼如下:
----以下假定Permission表有多個(gè)IsRight記錄
SELECT @VAR1 = IsRight FROM Permission --將取最后一個(gè)值
SET @VAR1 = IsRight FROM Permission --將報(bào)錯(cuò)
3、表達(dá)式無返回值時(shí),用SET將置變量值為NULL,用SELECT交保持變量值,如下:
復(fù)制代碼 代碼如下:
----以下假定Permission記錄為空
SET @VAR1 = '初始值'
SELECT @VAR1 = IsRight FROM Permission --此時(shí)@VAR1為'初始值'
SET @VAR1 = (SELECT IsRight FROM Permission) --此時(shí)@VAR1為NULL
4、使用標(biāo)量子查詢時(shí),如果無返回值,SET和SELECT一樣,都將置為NULL,如下:
復(fù)制代碼 代碼如下:
----以下假定Permission記錄為空
SET @VAR1 = '初始值'
SELECT @VAR1 =(SELECT IsRight FROM Permission ) --此時(shí)@VAR1為NULL
SET @VAR1 = ( SELECT IsRight FROM Permission) --此時(shí)@VAR1為NULL
相關(guān)文章
一文搞懂MySQL XA如何實(shí)現(xiàn)分布式事務(wù)
MySQL如何實(shí)現(xiàn)多個(gè)MySQL數(shù)據(jù)庫(kù)更新的一致性呢?那就是MySQL XA,本文就來介紹一下MySQL XA如何實(shí)現(xiàn)分布式事務(wù),具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11Linux安裝mysql并配置外網(wǎng)訪問的實(shí)例
今天小編就為大家分享一篇Linux安裝mysql并配置外網(wǎng)訪問的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05MySql UNION 一行轉(zhuǎn)多列的實(shí)現(xiàn)示例
在MySQL命令行中,有時(shí)候我們會(huì)遇到一行的數(shù)據(jù)需要以多列的形式呈現(xiàn)的情況,本文就詳細(xì)介紹了一下一行轉(zhuǎn)多列的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08mysql 1130錯(cuò)誤,無法登錄遠(yuǎn)程服務(wù)的解決
這篇文章主要介紹了mysql 1130錯(cuò)誤,無法登錄遠(yuǎn)程服務(wù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03解決MySQL報(bào)錯(cuò):You?can‘t?specify?target?table?‘region‘?for?
這篇文章主要給大家介紹了關(guān)于MySQL報(bào)錯(cuò):You?can‘t?specify?target?table?‘region‘?for?update?in?FROM?clause的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02mac系統(tǒng)OS X10.10版本安裝最新5.7.9mysql的方法
這篇文章給大家介紹mac系統(tǒng)OS X10.10版本安裝最新5.7.9mysql的方法,本文分步驟純文字說明,介紹的非常詳細(xì),具有參考價(jià)值,在此分享供大家參考2015-10-10Mysql避免重復(fù)插入數(shù)據(jù)的4種方式
這篇文章主要介紹了Mysql避免重復(fù)插入數(shù)據(jù)的4種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02