理解SQL语法

Bil*_*eer 2 sql t-sql sql-server

我是一名C#开发人员,试图更熟悉SQL Server存储过程.

我有点困惑为什么"A"中的语法有效并且"B"不起作用Set @id.这里发生了什么让"B"需要Select而不是Set

例A(作品)

DECLARE @currDateTime DateTime

SET @currDateTime = GetDate()

SELECT @currDateTime
Run Code Online (Sandbox Code Playgroud)

例B(不起作用)

 DECLARE @id int

 SET @id = ID FROM [MyTable] WHERE [Field1] = 'Test'
Run Code Online (Sandbox Code Playgroud)

例C(有效)

 DECLARE @id int

 SELECT @id = ID 
 FROM [MyTable] 
 WHERE [Field1] = 'Test'
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

SELECT是一种内置类型的SQL子句,它运行查询并以表格的形式返回结果集,或者将变量分配给查询的结果.

SET 是一个设置变量的子句.

两者非常不同. SELECT有各种其他相关条款,如FROM,WHERE等等; SET才不是. SELECT在正常使用情况下将值作为结果表返回; SET才不是.

不可否认,两者在表达式中看起来都是一样的:

set @currDateTime = GetDate();
select @currDateTime = GetDate();
Run Code Online (Sandbox Code Playgroud)

但是,设置单个值的语法看起来是相同的,这实在是巧合.