共计 1967 个字符,预计需要花费 5 分钟才能阅读完成。
这篇文章主要介绍了 SQL SERVER 中 SELECT 和 SET 赋值有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。
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;
DECLARE @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;
BEGIN
CREATE TABLE #temp( [Name] NVARCHAR(128) ,
AGE INT
)
INSERT INTO #temp([Name],AGE) VALUES(N 小明 ,18)
INSERT INTO #temp([Name],AGE) VALUES(N 小张 ,19)
INSERT INTO #temp([Name],AGE) VALUES(N 小王 ,17)
DECLARE @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; -- 正确运行, 显示结果:18
PRINT @NAME2; -- 正确运行, 显示结果:小王
PRINT @AGE2; -- 正确运行, 显示结果:17
DECLARE @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 --SET 标量在查询赋值
SELECT @AGE1=(SELECT TOP 1 AGE FROM #temp WHERE 1 --SELECT 标量在查询赋值
SELECT @NAME2=[NAME],@AGE2=[AGE] FROM #temp WHERE 1 --SELECT 查询语句中赋值
PRINT @NAME1; -- 正确运行, 实际值:NULL, 显示结果:(空白)PRINT @AGE1; -- 正确运行, 实际值:NULL, 显示结果:(空白)PRINT @NAME2; -- 正确运行, 实际和显示值:初始名字
PRINT @AGE2; -- 正确运行, 实际和显示值:0
GO
那么我们该如何选择使用哪种方式:
1. 因 SET 作为 ANSI 的标准,因此其是推荐用法。
2. 在不考虑标准的情况下,如果涉及到对多个变量赋值,为了少写代码或者获取多个全局变量的值时,请考虑使用 SELECT,一是因为简便,二是一些全局变量会在在第二句执行时值发生变化。
感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“SQL SERVER 中 SELECT 和 SET 赋值有什么区别”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!