Sql中的set和select赋值方式的区别 SQL赋值SET和SELECT的区别

asp\u4e2dsql\u4e2d\u7684set\u548cselect\u8d4b\u503c\u65b9\u5f0f\u7684\u533a\u522b

\u60a8\u597d\uff1a
SELECT\u8d4b\u503c\u662f\u901a\u8fc7\u67e5\u8be2\u8bed\u53e5\u8fd4\u56de\u552f\u4e00\u4e00\u6761\u7ed3\u679c\uff0c\u7ed9\u53d8\u91cf\u8d4b\u503c
\u5982
SELECT
@ACCOUNT=ACCOUNT,@NAME=NAME
FROM
\u7528\u6237\u8868
WHERE
ID=@ID--\u552f\u4e00\u4e3b\u952e
SET
\u8d4b\u503c\u662f\u53d8\u91cf\u95f4\u8d4b\u503c\uff0c\u6216\u53d8\u91cf\u521d\u59cb\u5316\u3002
\u5982
SET
@NAME='\u5f20\u4e09'
\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u4f7f\u7528\u4e0d\u540c\u7684\u65b9\u5f0f\u83b7\u53d6\u9700\u8981\u7684\u503c\u3002\u662f\u6839\u636e\u6570\u636e\u6765\u6e90\u6765\u533a\u5206\u7684\u3002

\u6700\u8fd1\u7684\u9879\u76ee\u5199\u7684SQL\u6bd4\u8f83\u591a\uff0c\u7ecf\u5e38\u4f1a\u7528\u5230\u5bf9\u53d8\u91cf\u8d4b\u503c\uff0c\u800c\u6211\u4f7f\u7528SET\u548cSELECT\u90fd\u4f1a\u8fbe\u5230\u6548\u679c\u3002
\u90a3\u5c31\u6709\u4e9b\u8ff7\u60d1\uff0c\u8fd9\u4e24\u8005\u6709\u4ec0\u4e48\u533a\u522b\u5462\uff1f\u4ec0\u4e48\u65f6\u5019\u54ea\u8be5\u54ea\u4e2a\u5462\uff1f
\u7ecf\u8fc7\u7f51\u4e0a\u7684\u67e5\u8be2\uff0c\u53ca\u4e2a\u4eba\u7ec3\u4e60\uff0c\u603b\u7ed3\u4e24\u8005\u6709\u4ee5\u4e0b\u51e0\u70b9\u4e3b\u8981\u533a\u522b\uff1a
\u5047\u5b9a\u6709\u8bbe\u5b9a\u53d8\u91cf\uff1a

DECLARE @VAR1 VARCHAR(1)
DECLARE @VAR2 VARCHAR(2)


1\u3001SELECT\u53ef\u4ee5\u5728\u4e00\u6761\u8bed\u53e5\u91cc\u5bf9\u591a\u4e2a\u53d8\u91cf\u540c\u65f6\u8d4b\u503c,\u800cSET\u53ea\u80fd\u4e00\u6b21\u5bf9\u4e00\u4e2a\u53d8\u91cf\u8d4b\u503c\uff0c\u5982\u4e0b\uff1a

SELECT @VAR1='Y',@VAR2='N'
-- \u800cSET\u8981\u8fbe\u5230\u540c\u6837\u7684\u6548\u679c\uff0c\u9700\u8981\uff1a
SET @VAR1='Y'
SET @VAR2='N'

/*
\u8bf4\u5230\u8fd9\u4e2a\uff0cSQL\u5185\u7f6e\u7684\u53d8\u91cf\uff1a@@ERROR \u548c @@ROWCOUNT\u5fc5\u987b\u8981\u5728\u4e00\u53e5SQL\u8bed\u53e5\u4e2d\u6355\u83b7\u3002\u5982\u679c\u7528set\u5206\u4e24\u53e5\u6765\u83b7\u53d6\u5b83\u4eec\uff0c\u5c06\u83b7\u53d6\u4e0d\u5b8c\u6574\uff0c\u8fd9\u65f6\u5c31\u5e94\u8be5\u7528select\u6765\u83b7\u53d6\u503c\u3002
*/

2\u3001\u8868\u8fbe\u5f0f\u8fd4\u56de\u591a\u4e2a\u503c\u65f6\uff0c\u7528SET\u5c06\u4f1a\u51fa\u9519\uff0c\u800cSELECT\u5c06\u53d6\u6700\u540e\u4e00\u4e2a\u503c\uff0c\u5982\u4e0b\uff1a

----\u4ee5\u4e0b\u5047\u5b9aPermission\u8868\u6709\u591a\u4e2aIsRight\u8bb0\u5f55
SELECT @VAR1 = IsRight FROM Permission --\u5c06\u53d6\u6700\u540e\u4e00\u4e2a\u503c

SET @VAR1 = IsRight FROM Permission --\u5c06\u62a5\u9519


3\u3001\u8868\u8fbe\u5f0f\u65e0\u8fd4\u56de\u503c\u65f6\uff0c\u7528SET\u5c06\u7f6e\u53d8\u91cf\u503c\u4e3aNULL,\u7528SELECT\u4ea4\u4fdd\u6301\u53d8\u91cf\u503c\uff0c\u5982\u4e0b\uff1a

----\u4ee5\u4e0b\u5047\u5b9aPermission\u8bb0\u5f55\u4e3a\u7a7a
SET @VAR1 = '\u521d\u59cb\u503c'


SELECT @VAR1 = IsRight FROM Permission --\u6b64\u65f6@VAR1\u4e3a'\u521d\u59cb\u503c'

SET @VAR1 = (SELECT IsRight FROM Permission) --\u6b64\u65f6@VAR1\u4e3aNULL


4\u3001\u4f7f\u7528\u6807\u91cf\u5b50\u67e5\u8be2\u65f6\uff0c\u5982\u679c\u65e0\u8fd4\u56de\u503c\uff0cSET\u548cSELECT\u4e00\u6837\uff0c\u90fd\u5c06\u7f6e\u4e3aNULL,\u5982\u4e0b\uff1a

----\u4ee5\u4e0b\u5047\u5b9aPermission\u8bb0\u5f55\u4e3a\u7a7a
SET @VAR1 = '\u521d\u59cb\u503c'

SELECT @VAR1 =(SELECT IsRight FROM Permission ) --\u6b64\u65f6@VAR1\u4e3aNULL

SET @VAR1 = ( SELECT IsRight FROM Permission) --\u6b64\u65f6@VAR1\u4e3aNULL

最近的项目写的SQL比较多,经常会用到对变量赋值,而我使用SET和SELECT都会达到效果。
那就有些迷惑,这两者有什么区别呢?什么时候哪该哪个呢?
经过网上的查询,及个人练习,总结两者有以下几点主要区别:
假定有设定变量:
复制代码 代码如下:
DECLARE @VAR1 VARCHAR(1)
DECLARE @VAR2 VARCHAR(2)
1、SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值,如下:

复制代码 代码如下:
SELECT @VAR1='Y',@VAR2='N'
-- 而SET要达到同样的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'
/*
说到这个,SQL内置的变量:@@ERROR 和 @@ROWCOUNT必须要在一句SQL语句中捕获。如果用set分两句来获取它们,将获取不完整,这时就应该用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

http://zhidao.baidu.com/link?url=ZsVBb01WV1d2512Rm-jxoLPNCE8m-MY8Wdxw37_9rQZIXUcyR57DFLWC4gmweteCiA0YKfsphrcex-Txjzo13KwO1NBo_bcZ8JVyp_7yQa7

DECLARE @VAR1 VARCHAR(1)
DECLARE @VAR2 VARCHAR(2)

1、SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值,如下:

SELECT @VAR1='Y',@VAR2='N'
-- 而SET要达到同样的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'

/*
说到这个,SQL内置的变量:@@ERROR 和 @@ROWCOUNT必须要在一句SQL语句中捕获。如果用set分两句来获取它们,将获取不完整,这时就应该用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

以上内容为复制答案


                            set                  select

同时对多个变量同时赋值     不支持                  支持

表达式返回多个值时         出错                  将返回的最后一个值赋给变量

表达式未返回值             变量被赋null值         变量保持原值


  • SQL 璇彞閲宻et鏄粈涔堟剰鎬濆晩
    绛旓細SET鏄SQL Server 涓宸茬粡瀹氫箟鐨勫彉閲忚祴鍊肩殑鏂瑰紡锛岀粡甯镐笌update璇彞涓璧蜂娇鐢ㄣ傝娉曪細UPDATE 琛ㄥ悕绉 SET 鍒楀悕绉 = 鏂板 WHERE 鍒楀悕绉 = 鏌愬 渚嬪瓙濡備笅锛歶pdate A set name=灏忓紶 where name =寮犱笁 //灏嗗皬寮犵殑濮撳悕鏀逛负寮犱笁 update A set name=灏忕帇 where name =鐜嬩簲 //灏嗗皬鐜嬬殑濮撳悕鏀逛负鐜嬩簲 ...
  • SELECT SET 鍦SQL涓璧峰埌浠涔堜綔鐢?
    绛旓細Select鍙互涓娆$粰涓涓垨澶氫釜鍙橀噺璧嬪硷紝姣斿 Select @param1=col1,@param2=col2 from 琛 鑰孲ET涓娆″彧缁欎竴涓彉閲忚祴鍊笺SET @param3='123'
  • SQL璧嬪SET鍜孲ELECT鐨勫尯鍒
    绛旓細1銆SELECT鍙互鍦ㄤ竴鏉¤鍙ラ噷瀵瑰涓彉閲忓悓鏃惰祴鍊,鑰SET鍙兘涓娆″涓涓彉閲忚祴鍊硷紝濡備笅锛歋ELECT @VAR1='Y',@VAR2='N'-- 鑰孲ET瑕佽揪鍒板悓鏍风殑鏁堟灉锛岄渶瑕侊細SET @VAR1='Y'SET @VAR2='N'/ 璇村埌杩欎釜锛孲QL鍐呯疆鐨勫彉閲忥細@@ERROR 鍜 @@ROWCOUNT蹇呴』瑕佸湪涓鍙SQL璇彞涓鎹曡幏銆傚鏋滅敤set鍒嗕袱鍙ユ潵鑾峰彇瀹冧滑锛屽皢...
  • SQL 涓 SET 鍜 SELECT 鏈変粈涔堝尯鍒???
    绛旓細浣犲彲浠ヨ繖鏍锋潵鐞嗚В锛岄鍏堜粬浠兘鍙互缁欏彉閲忚祴鍊硷紝鍍忕粰鍗曚釜鍙橀噺璧嬪兼椂锛屽鏋滀笉娑夊強鍒版暟鎹〃鎿嶄綔锛岄氬父浣跨敤SET鍏抽敭瀛楋紝濡傛灉鏄涓彉閲忚祴鍊硷紝骞朵笖杩欎簺鍊兼槸浠庢暟鎹〃涓鍙栫殑鎯呭喌涓嬶紝涓鑸兘閲囩敤SELECT璧嬪笺
  • 鍦sql璇彞涓涓哄眬閮ㄥ彉閲忚祴鍊肩殑鍏抽敭璇嶆槸浠涔堣窡浠涔
    绛旓細鍦sql璇彞涓负灞閮ㄥ彉閲忚祴鍊肩殑鍏抽敭璇嶆槸declare鍜set銆傜敤declare鍜宻et璇彞涓哄眬閮ㄥ彉閲忚祴鍊笺SET灞閮ㄥ彉閲忓悕=琛ㄨ揪寮SELECT灞閮ㄥ彉閲忓悕=琛ㄨ揪寮忥紝SELECT(璧嬪硷紝鏌ヨ(SQL))浣跨敤SELECT璇彞涓哄眬閮ㄥ彉閲忚祴鍊笺傛煡璇㈣鍙ャ
  • SQL涓璖ET鍜孲ELECT璧嬪肩殑鍖哄埆
    绛旓細set涓娆″彧鑳藉涓涓彉閲忚繘琛岃祴鍊 select涓娆″彲浠ュ澶氫釜鍙橀噺璧嬪 set鑻ヨ祴鍊肩殑鏌ヨ缁撴灉涓嶅瓨鍦ㄤ細璧嬪间负null select鑻ョ粨鏋滀笉瀛樺湪涓嶄細杩涜璧嬪兼搷浣滐紝涔熷氨鏄锛屼細淇濈暀涓婃鐨勫彉閲忚祴鍊肩粨鏋
  • 濡備綍鍦sql涓鎶set 鍜宻elect 鏀惧埌涓涓猻ql璇彞:渚嬪'set @f=select a...
    绛旓細select 鍜set閮藉彲浠ョ粰鍙橀噺璧嬪硷紱'set @f=select a from table where b=10' 杩欑鍐欐硶璇硶涓婇氫笉杩 DECLARE @w int select @w= COUNT(*) from master..spt_values select @w
  • asp涓sql涓殑set鍜宻elect璧嬪兼柟寮忕殑鍖哄埆
    绛旓細鎮ㄥソ锛SELECT璧嬪兼槸閫氳繃鏌ヨ璇彞杩斿洖鍞竴涓鏉$粨鏋滐紝缁欏彉閲忚祴鍊 濡 SELECT ACCOUNT=ACCOUNT,@NAME=NAME FROM 鐢ㄦ埛琛 WHERE ID=@ID--鍞竴涓婚敭 SET 璧嬪兼槸鍙橀噺闂磋祴鍊硷紝鎴栧彉閲忓垵濮嬪寲銆傚 SET NAME='寮犱笁'鏍规嵁瀹為檯鎯呭喌浣跨敤涓嶅悓鐨勬柟寮忚幏鍙栭渶瑕佺殑鍊笺傛槸鏍规嵁鏁版嵁鏉ユ簮鏉ュ尯鍒嗙殑銆
  • SQL Server 涓 Select @a='a' 鍜 Set @a='a' 鏈変粈涔堝紓鍚岀偣?
    绛旓細鍦ㄦ煡璇㈠垎鏋愬櫒閲锛岄変腑鐩稿簲鐨勮鍙ワ紝鐒跺悗鐢╟trl+L 蹇嵎閿煡鐪嬮璁℃墽琛岃鍒掞紝鍙互鐪嬪嚭锛屼袱绉嶆搷浣滅殑鐗╃悊鎿嶄綔鍜岄昏緫鎿嶄綔瀹為檯涓婇兘鏄select銆傚彟澶栫敤select 濡傛灉鏈塮rom璇彞锛屽綋缁撴灉瓒呰繃涓涓殑鏃跺欙紝select浼氬皢鏈鍚庝竴涓粨鏋滆祴缁欏彉閲
  • T-SQL set鍜宻elect 闂
    绛旓細set 鍜宻elect閮藉彲浠ヨ祴鍊硷紝绗笁琛屽拰绗叚琛岀殑鎰忔濇槸鎶婁綘鐨凘var1,@var2鏄剧ず鍑烘潵
  • 扩展阅读:sql中select的用法 ... sql delete语句怎么写 ... 在sql的select查询中使用 ... sql insert ... sqlset语句用法 ... selv只作为接地系统的电击 ... sql和python哪个难学 ... 在sql的select命令中用 ... set在sql中什么意思 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网