在T-SQL中分配变量时,SET
和SELECT
语句之间有什么区别?分配变量时SET与SELECT?
回答
Quote,它从this article总结:
- SET为变量赋值ANSI标准,SELECT不是。
- SET一次只能分配一个变量,SELECT可以一次做多个赋值。
- 如果从查询分配,SET只能分配一个标量值。如果查询返回多个值/行,则SET将引发错误。 SELECT会将其中一个值分配给变量,并隐藏返回多个值的事实(因此您可能永远不会知道为什么某处出错了) -
- 从查询中分配时是否存在是没有值返回然后SET将分配NULL,其中SELECT不会完成任务(因此变量将不会从其以前的值更改)
- 就速度差异 - SET和SELECT之间没有直接差异。然而,SELECT在一次拍摄中进行多个分配的能力确实比SET有稍微的速度优势。
我相信SET
是ANSI标准,而SELECT
不是。在下面的示例中,如果找不到值,请注意SET
与SELECT
的不同行为。
declare @var varchar(20)
set @var = 'Joe'
set @var = (select name from master.sys.tables where name = 'qwerty')
select @var /* @var is now NULL */
set @var = 'Joe'
select @var = name from master.sys.tables where name = 'qwerty'
select @var /* @var is still equal to 'Joe' */
+1最好是运行一次才能理解,检查,播放,记住它只读,但其他答案只是文本 – 2010-10-16 07:36:44
如果您实际使用'select @var =(从master.sys.tables中选择名称,其中名称='qwerty')'你会得到@var为空。你给的例子不是同一个查询。 – Zack 2015-06-01 14:55:56
@Zack你完全错过了这个例子的要点。 – 2015-06-01 17:11:29
在编写查询,这种差异应牢记:
DECLARE @A INT = 2
SELECT @A = TBL.A
FROM (SELECT 1 A) TBL
WHERE 1 = 2
SELECT @A
/* @A is 2*/
---------------------------------------------------------------
DECLARE @A INT = 2
SET @A = (
SELECT TBL.A
FROM (SELECT 1 A) TBL
WHERE 1 = 2
)
SELECT @A
/* @A is null*/
非常好,简洁 – SimplyInk 2018-02-26 06:02:51
- 1. 从select语句分配变量
- 2. C++从SQL Server分配变量值SELECT
- 3. 分配JavaScript变量与AJAX
- 4. 花费的时间分配一个变量与分配+添加
- 5. 分配时间给变量
- 6. 何时分配ReadOnly变量?
- 7. 分配变量
- 8. 分配变量
- 9. 分配变量
- 10. 分配“/ *”变量
- 11. 分配变量
- 12. Excepion与MysqlCommand和“SET @q:”变量C#?
- 13. 分配给null的变量与未分配的变量之间的区别
- 14. 置换变量SET
- 15. 显示SET变量
- 16. SET表变量2008
- 17. MYSQL变量 - SET @var
- 18. 对象分配与动态变量
- 19. 分配结构C++与HLSL变量
- 20. 如何将SELECT语句分配给变量并使用PostgreSQL执行该变量
- 21. 分配给变量
- 22. JavaScript分配变量
- 23. 不分配变量
- 24. 减:分配变量?
- 25. 分配变量块
- 26. 多个变量赋值使用SET和SELECT
- 27. SQL服务器SET变量在使用SELECT时不允许使用选项
- 28. 如何将SELECT查询的结果分配给变量?
- 29. 从PHP和MySQL中的SELECT查询分配变量
- 30. 在select子句中分配和使用mysql用户变量
我没有downvote,但下面是不太正确的:“至于速度的差异 - 有没有直接的差异SET和SELECT之间“。如果您一次分配多个值,那么通过多个集合可以快得多。 Google up“使用一个SELECT分配多个变量的速度更快” – 2010-10-15 19:53:52
@AlexKuznetsov:之后的句子表明了这一点。 – 2010-10-15 19:59:21
@OMG小马:它可以快10倍或更多,所以我不确定它是否“轻微的速度优势”。 – 2010-10-15 20:22:18