这似乎与here重复,但事实并非如此。我想要获得最佳实践,而不是技术性答案(我已经(我认为)我知道)。
SQL Server的新手,并试图养成良好的习惯
我找到了SET @var =
和SELECT @var =
之间功能差异的一个很好的解释
在这里:http://vyaskn.tripod.com/differences_between_set_and_select.htm
总结另一个没有的东西(见示例来源):
SET:
SET @var = (SELECT column_name FROM table_name)
失败,从而消除了不可预测结果的可能性。SET @var = (SELECT column_name FROM table_name)
会将@var
设置为NULL(如果这是SELECT column_name FROM table_name
返回的内容,因此永远不会将@var
留在其先前值。选择
SELECT @var = column_name FROM table_name
会将@var
设置为(根据我的测试)select返回的最后一个值。这可能是一个功能或错误。可以使用SELECT @j = (SELECT column_name FROM table_name)
语法更改行为。那么,我该怎么办?
(差不多)总是使用SET @var =
,使用SELECT @var =
编码很乱而不是标准。
或者
自由使用SELECT @var =
,除非代码可能移植到其他环境,否则它可以为我完成更多工作。
由于
答案 0 :(得分:2)
这是我的意见 - 使用SET进行简单操作,例如SET @var = 'hardcoded_value'
,并使用SELECT进行tricker分配,例如从表中进行。我几乎总是以下列方式将select语句编写成变量语句,以使编译器和任何其他开发人员明白我的意图:SELECT TOP 1 @var = col_name FROM some_table
如果我担心可移植性,我不会编写T-SQL,而是坚持使用ORM层来进行数据访问。
编辑,奖金提示:在SQL 08中,我喜欢使用这种对T-SQL来说相当简洁的语法:
DECLARE @var int = (SELECT col_name FROM some_table)
答案 1 :(得分:0)
没有太多可说的,因为你自己提到的文章已经很好地涵盖了它。
标准对你很重要吗?如果 你的答案是'是',那么你应该 使用SET。
至于我自己的标准,我并不真正使用一个,这取决于行星的排列。阅读完文章后,我必须承认我对SET
略有偏好。