SQL SERVER中SELECT和SET赋值雷同点与不合点(推荐)

发布时间:2019-12-02 16:21 来源:互联网 以后栏目:网站办事器

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;
GO
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;
END
ELSE
BEGIN
  CREATE TABLE #temp(
  [Name] NVARCHAR(128) ,
  AGE INT
  )
END
GO
INSERT INTO #temp([Name],AGE) VALUES(N'小明',18)
INSERT INTO #temp([Name],AGE) VALUES(N'小张',19)
INSERT INTO #temp([Name],AGE) VALUES(N'小王',17)
GO
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

GO

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>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; --精确运转,实际和显示值:0
GO

 那么我们该若何选择应用哪一种方法:

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

2. 在不推敲标准的情况下,假设触及到对多个变量赋值,为了少写代码或许获得多个全局变量的值时,请推敲应用SELECT,一是由于简便,二是一些全局变量会在在第二句履行时价产生变更。

总结

以上所述是小编给大年夜家简介的SQL SERVER中SELECT和SET赋值雷同点与不合点,欲望对大年夜家有所赞助,假设大年夜家有任何疑问请给我留言,小编会及时答复大年夜家的。在此也异常感激大年夜家对IIS7站长之家网站的支撑!
假设你认为本文对你有赞助,迎接转载,烦请注明出处,感谢!

  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、