我是一名C#开发人员,试图更熟悉SQL Server存储过程。
我有点困惑为什么“A”中的语法有效,而“B”不适用于Set @id
。这里发生什么使得“B”需要Select
而不是Set
?
示例A(有效)
DECLARE @currDateTime DateTime
SET @currDateTime = GetDate()
SELECT @currDateTime
示例B(不起作用)
DECLARE @id int
SET @id = ID FROM [MyTable] WHERE [Field1] = 'Test'
示例C(有效)
DECLARE @id int
SELECT @id = ID
FROM [MyTable]
WHERE [Field1] = 'Test'
答案 0 :(得分:5)
SELECT
是一种内置类型的SQL子句,它运行查询并以表格或的格式返回结果集,它将变量分配给查询的结果
SET
是一个设置变量的子句。
这两者非常不同。 SELECT
有各种其他相关条款,例如FROM
,WHERE
等等; SET
没有。 SELECT
在正常使用情况下将值作为结果表返回; SET
没有。
不可否认,两者在表达式中看起来都是一样的:
set @currDateTime = GetDate();
select @currDateTime = GetDate();
但是,设置单个值的语法看起来是相同的,这实在是巧合。
答案 1 :(得分:2)
它不起作用,因为它的SQL语法不正确,从表/视图/表函数中获取数据时需要SELECT
。
使用表达式时可以使用SET,即:
DECLARE @Id bigint
SET @Id = (SELECT TOP 1 Id
FROM MyTable
WHERE Field1 = 'Test')