2016-05-31 19 views
2

私はSQL Serverのストアドプロシージャの知識を深めようとするC#開発者です。SQL構文の理解

「A」の構文が正しく動作し、「B」がSet @idで動作しない理由について少し混乱します。ここで何が起きているのかを "B"にするにはの代わりにSelectが必要ですか?

例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' 
+1

'FROM'はない' SET'に 'SELECT'に属しています。詳細については、[this link](http://stackoverflow.com/questions/866767/set-vs-select-whats-the-difference) –

+0

を参照してください。テーブルから値を取得する場合は、「選択」を使用します。単純な代入文の場合 'Set' – Karthikeyan

答えて

5

SELECTは、の内蔵型でありますクエリを実行し、テーブルの形式で結果セットを返すSQL句またはは、クエリの結果に変数を割り当てます。

SETは、変数を設定する句です。

2つは非常に異なります。 ,WHEREなどのような様々な他の関連する句を有している。SELECTは、 SETはありません。 SELECTは、通常の使用法では結果テーブルとして値を返します。 SETはありません。

確かに、両方のは、次のような式で同じように見える:

set @currDateTime = GetDate(); 
select @currDateTime = GetDate(); 

しかし、それは単一の値を設定するための構文は同じように見えてしまっていることは本当に偶然の一致です。

2

テーブル/ビュー/テーブル関数からデータをフェッチするときに、それが正しくないSQL構文であるため、動作しません。SELECTが必要です。

表現すなわちかかわらを使用するときは、SETを使用することができます。

DECLARE @Id bigint 


SET @Id = (SELECT TOP 1 Id 
       FROM MyTable 
       WHERE Field1 = 'Test')