基于SQL中SET與SELECT賦值的區(qū)別詳解
更新時間:2013年06月05日 17:25:24 作者:
本篇文章是對SQL中SET與SELECT賦值的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
最近的項目寫的SQL比較多,經(jīng)常會用到對變量賦值,而我使用SET和SELECT都會達到效果。
那就有些迷惑,這兩者有什么區(qū)別呢?什么時候哪該哪個呢?
經(jīng)過網(wǎng)上的查詢,及個人練習(xí),總結(jié)兩者有以下幾點主要區(qū)別:
假定有設(shè)定變量:
DECLARE @VAR1 VARCHAR(1)
DECLARE @VAR2 VARCHAR(2)
1、SELECT可以在一條語句里對多個變量同時賦值,而SET只能一次對一個變量賦值,如下:
SELECT @VAR1='Y',@VAR2='N'
-- 而SET要達到同樣的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'
/*
說到這個,SQL內(nèi)置的變量:@@ERROR 和 @@ROWCOUNT必須要在一句SQL語句中捕獲。如果用set分兩句來獲取它們,將獲取不完整,這時就應(yīng)該用select來獲取值。
*/
2、表達式返回多個值時,用SET將會出錯,而SELECT將取最后一個值,如下:
----以下假定Permission表有多個IsRight記錄
SELECT @VAR1 = IsRight FROM Permission --將取最后一個值
SET @VAR1 = IsRight FROM Permission --將報錯
3、表達式無返回值時,用SET將置變量值為NULL,用SELECT交保持變量值,如下:
----以下假定Permission記錄為空
SET @VAR1 = '初始值'
SELECT @VAR1 = IsRight FROM Permission --此時@VAR1為'初始值'
SET @VAR1 = (SELECT IsRight FROM Permission) --此時@VAR1為NULL
4、使用標量子查詢時,如果無返回值,SET和SELECT一樣,都將置為NULL,如下:
----以下假定Permission記錄為空
SET @VAR1 = '初始值'
SELECT @VAR1 =(SELECT IsRight FROM Permission ) --此時@VAR1為NULL
SET @VAR1 = ( SELECT IsRight FROM Permission) --此時@VAR1為NULL
那就有些迷惑,這兩者有什么區(qū)別呢?什么時候哪該哪個呢?
經(jīng)過網(wǎng)上的查詢,及個人練習(xí),總結(jié)兩者有以下幾點主要區(qū)別:
假定有設(shè)定變量:
復(fù)制代碼 代碼如下:
DECLARE @VAR1 VARCHAR(1)
DECLARE @VAR2 VARCHAR(2)
1、SELECT可以在一條語句里對多個變量同時賦值,而SET只能一次對一個變量賦值,如下:
復(fù)制代碼 代碼如下:
SELECT @VAR1='Y',@VAR2='N'
-- 而SET要達到同樣的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'
/*
說到這個,SQL內(nèi)置的變量:@@ERROR 和 @@ROWCOUNT必須要在一句SQL語句中捕獲。如果用set分兩句來獲取它們,將獲取不完整,這時就應(yīng)該用select來獲取值。
*/
2、表達式返回多個值時,用SET將會出錯,而SELECT將取最后一個值,如下:
復(fù)制代碼 代碼如下:
----以下假定Permission表有多個IsRight記錄
SELECT @VAR1 = IsRight FROM Permission --將取最后一個值
SET @VAR1 = IsRight FROM Permission --將報錯
3、表達式無返回值時,用SET將置變量值為NULL,用SELECT交保持變量值,如下:
復(fù)制代碼 代碼如下:
----以下假定Permission記錄為空
SET @VAR1 = '初始值'
SELECT @VAR1 = IsRight FROM Permission --此時@VAR1為'初始值'
SET @VAR1 = (SELECT IsRight FROM Permission) --此時@VAR1為NULL
4、使用標量子查詢時,如果無返回值,SET和SELECT一樣,都將置為NULL,如下:
復(fù)制代碼 代碼如下:
----以下假定Permission記錄為空
SET @VAR1 = '初始值'
SELECT @VAR1 =(SELECT IsRight FROM Permission ) --此時@VAR1為NULL
SET @VAR1 = ( SELECT IsRight FROM Permission) --此時@VAR1為NULL
相關(guān)文章
mysql報1292?Incorrect?datetime?value錯誤的解決方法
這篇文章主要給大家介紹如何解決mysql報1292?Incorrect?datetime?value錯誤,文中有詳細的解決方案,具有一定的參考價值,需要的同學(xué)可以參考閱讀下本文2023-07-07
連接mysql報錯——沒有設(shè)置“usessl=false”的問題
這篇文章主要介紹了連接mysql報錯——沒有設(shè)置“usessl=false”的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
MySQL 數(shù)據(jù)庫優(yōu)化的具體方法說明
以下的文章主要講述的是實現(xiàn)MySQL數(shù)據(jù)庫簡單實用優(yōu)化的具體方法,以及在實際操作中有哪些具體操作步驟是值得我們大家注意的。2010-05-05
MySQL 8.0.19支持輸入3次錯誤密碼鎖定賬戶功能(例子)
這篇文章主要介紹了MySQL 8.0.19支持輸入3次錯誤密碼鎖定賬戶功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
MySQL子查詢與HAVING/SELECT的結(jié)合使用
這篇文章主要介紹了MySQL子查詢在HAVING/SELECT字句中使用、及相關(guān)子查詢和WITH/EXISTS字句的使用,具有一定的參考價值,感興趣的可以了解一下2023-06-06

