千家信息网

SQL SERVER中SELECT和SET赋值异同点有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本文小编为大家详细介绍"SQL SERVER中SELECT和SET赋值异同点有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"SQL SERVER中SELECT和SET赋值异同点有哪些"文章能帮助
千家信息网最后更新 2026年10月31日SQL SERVER中SELECT和SET赋值异同点有哪些

本文小编为大家详细介绍"SQL SERVER中SELECT和SET赋值异同点有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"SQL SERVER中SELECT和SET赋值异同点有哪些"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

SELECT和SET在SQL SERVER中都可以用来对变量进行赋值,但其用法和效果在一些细节上有些不同。

1. 在对变量赋值方面,SET是ANSI标准的赋值方式,SELECT则不是。这也是SET方式被推荐使用的原因之一。

2. SELECT可以一次对多个变量进行赋值,而SET一次只能对一个变量赋值。

DECLARE @NAME NVARCHAR(128), @AGE INT;SET @NAME = N'小明';SET @AGE=18;PRINT @NAME;PRINT @AGE;GODECLARE @NAME NVARCHAR(128), @AGE INT;SELECT @NAME = N'小明',@AGE=18;PRINT @NAME;PRINT @AGE;

3.当使用子查询给变量赋值时,则要求子查询必须是标量子查询(即子查询得到结果是一个数据或者一行一列),不能返回多个值,否则会报错。

1)但要注意的是,如果在SELECT查询语句中给变量赋值的时候,查询语句返回记录的多少都不会产生错误,变量所得的值是查询语句最后一行的记录的相应值。

2)如果查询结果没有返回记录,也就是说返回为NULL值时,将整个子查询进行赋值的方式,SET和SELECT都会设置为NULL,而在SELECT查询语句中赋值,变量会保持为初始值不受影响。

IF (OBJECT_ID('tempdb..#temp') is not null)BEGIN  DROP TABLE #temp;ENDELSEBEGIN  CREATE TABLE #temp(  [Name] NVARCHAR(128) ,  AGE INT  )ENDGOINSERT INTO #temp([Name],AGE) VALUES(N'小明',18)INSERT INTO #temp([Name],AGE) VALUES(N'小张',19)INSERT INTO #temp([Name],AGE) VALUES(N'小王',17)GODECLARE @NAME1 NVARCHAR(128), @AGE1 INT,@NAME2 NVARCHAR(128), @AGE2 INT;SET @NAME1=(SELECT TOP 1 [NAME] FROM #temp);  --SET标量在查询赋值SELECT @AGE1=(SELECT TOP 1 AGE FROM #temp);    --SELECT标量在查询赋值SELECT @NAME2=[NAME],@AGE2=[AGE] FROM #temp;  --SELECT查询语句中赋值PRINT @NAME1; --正确运行,显示结果:小明PRINT @AGE1; --正确运行,显示结果:18PRINT @NAME2; --正确运行,显示结果:小王PRINT @AGE2; --正确运行,显示结果:17GODECLARE @NAME1 NVARCHAR(128), @AGE1 INT,@NAME2 NVARCHAR(128), @AGE2 INT;SELECT @NAME1=N'初始名字',@AGE1=0,@NAME2=N'初始名字',@AGE2=0; --初始化各变量值SET @NAME1=(SELECT TOP 1 [NAME] FROM #temp WHERE 1>1);  --SET标量在查询赋值SELECT @AGE1=(SELECT TOP 1 AGE FROM #temp WHERE 1>1);    --SELECT标量在查询赋值SELECT @NAME2=[NAME],@AGE2=[AGE] FROM #temp WHERE 1>1;  --SELECT查询语句中赋值PRINT @NAME1; --正确运行,实际值:NULL, 显示结果:(空白)PRINT @AGE1; --正确运行,实际值:NULL, 显示结果:(空白)PRINT @NAME2; --正确运行,实际和显示值:初始名字PRINT @AGE2; --正确运行,实际和显示值:0GO

那么我们该如何选择使用哪种方式:

1. 因SET作为ANSI的标准,因此其是推荐用法。

2. 在不考虑标准的情况下,如果涉及到对多个变量赋值,为了少写代码或者获取多个全局变量的值时,请考虑使用SELECT,一是因为简便,二是一些全局变量会在在第二句执行时值发生变化。

读到这里,这篇"SQL SERVER中SELECT和SET赋值异同点有哪些"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

查询 变量 结果 运行 语句 多个 实际 方式 标量 小明 异同 名字 文章 标准 一行 全局 内容 空白 细节 小王 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 云信互联网科技有限公司 重生之互联网科技帝国 上海互联网科技有限公司 互联网科技英文 互联网 卓越科技 互联网科技股票 远信互联网科技 天扬科技互联网广告 广州优美互联网科技 受益于互联网科技的高速发展 企晟互联网信息科技有限公司 互联网金融科技名词解释 山东子淼互联网科技有限公司 怎样加入科技互联网 互联网金融科技公司的优势 上海互联网科技公司ppt 长沙渺峰互联网科技有限公司 河南商务圈互联网科技有限公司 银川新华互联网科技学校招聘 互联网科技公司官网 互联网巨头投资的硬核科技 青海省互联网新科技 武汉健翔互联网络科技有限公司 广州市恰铎互联网科技有限公司 企晟互联网信息科技有限公司 华中科技大学互联网的牛人 领航科技大厦互联网公司 浙南科技城互联网大厦招聘 武汉亿视互联网科技有限公司
0