私は少し使用されている短いSQLスクリプトを持っています。スクリプト内で一時テーブルを再利用し、うまく動作しています。複数のバッチを含むSQL Serverストアドプロシージャ - 一時テーブルの再利用
最近、私は私が私を待って驚いていましたが、スクリプト全体を2つのバッチに分割するためにキーワードGO
を使用しています。どのように私は一時テーブルを再利用することができた) - これは、SQL Serverが私に吠えている理由です。ここで
は、スクリプトの機能を表示するダウン易しく書き直さスクリプトです:
DROP TABLE IF EXISTS #temp;
SELECT
'john' AS first_name
,'doe' AS last_name
INTO #temp;
SELECT * FROM #temp
GO
TRUNCATE TABLE #temp;
DROP TABLE #temp;
SELECT
'jane' AS first_name
,'doe' AS last_name
INTO #temp;
は、ここで私は失敗したとはいえ、手順で行うことを試みたものです:
CREATE PROCEDURE #temp_proc
AS
BEGIN
DROP TABLE IF EXISTS #temp;
SELECT
'john' AS first_name
,'doe' AS last_name
INTO #temp;
SELECT * FROM #temp
GO
TRUNCATE TABLE #temp;
DROP TABLE #temp;
SELECT
'jane' AS first_name
,'doe' AS last_name
INTO #temp;
END
ここで私が取得エラーメッセージがあります手順を作成しようとすると:
メッセージ104、レベル15、状態1、プロシージャ#temp_proc、行10 [バッチ開始行0]
'#temp'付近の構文が正しくありません。メッセージレベル102、レベル15、状態1、行20
'END'の近くに構文が正しくありません。
目的:私は手順でこのすべてを固執したいと思いますけれども、私は、同じ一時テーブル名を再利用し続けたいと思います。何か案は?
GOコマンドは、次のすべての命令を無視して、(前の)コードをSQL Serverに集約します...(後続の命令は別のコマンドで送信されます) – clementakis
GOはコードの最後に使用できます。 – clementakis
GOはSSMSバッチセパレータです...これは、単一のSSMSタブまたは単一のスクリプトでさまざまなことを行うための便利なツールです。たとえば、1つのファイルから5つの新しいprocsを削除する場合は、各procの定義をGOで区切る必要があります。一方、ストアドプロシージャは、独自のバッチとして実行され、バッチに分割することはできません。手続き定義からそれを単に削除するだけでよいのです。 –