MS SQL 2005で一時的なストアドプロシージャまたは関数を作成する機会はありますか?このストアドプロシージャをクエリでのみ使用したいので、実行後は削除されます。
一部のデータに対して実行したいクエリがあります。しかし、このコマンドを処理するすべてのテーブルについて、その一部を変更する必要があります。したがって、私は一時的なSPを作成し、提供する引数(テーブル名など)からクエリを返す)を作成し、このクエリをEXECで実行すると思いました。
そして、このストアドプロシージャは後で私にとっては役に立たないので、一時的にして、クエリの実行を終了すると消えるようにしたいと思います。
編集について-TSQLを含む(パラメータ化された)nvarchar
に対してsp_ExecuteSQLを使用する必要があるようです。
Sp_ExecuteSQLで検索します。簡単な例:
DECLARE @SQL nvarchar(4000),
@Table varchar(20) = 'ORDERS',
@IDColumn varchar(20) = 'OrderID',
@ID int = 10248
SET @SQL = 'SELECT * FROM [' + @Table + '] WHERE ['
+ @IDColumn + '] = @Key'
EXEC sp_executesql @SQL, N'@Key int', @ID
テーブル名と列名はクエリに連結する必要がありますが、値(@Key
など)はパラメータ化できます。
一時的なストアドプロシージャがありますが、spごとではなく、接続ごとです。
ただし、共通テーブル式を確認することをお勧めします-それらはあなたが求めているものかもしれません(ただし、それらから一度しか読み取ることができません)。
たぶん、あなたが何をしようとしているのかを明確にすることができればdo?
この質問は少し古いですが、他の回答は一時的なプロシージャを作成するための構文を提供できませんでした。構文は一時テーブルの場合と同じです:ローカル一時オブジェクトの#name、グローバル一時オブジェクトの## name。
CREATE PROCEDURE #uspMyTempProcedure AS
BEGIN
print 'This is a temporary procedure'
END
これは公式ドキュメントの「プロシージャ名」セクションで説明されています。 http://technet.Microsoft.com/en-us/library/ms187926%28v=sql.90%29.aspx
この手法を使用して、プリミティブT-SQLユニットテストのコードを重複排除しています。実際の単体テストフレームワークの方が優れていますが、これは何も実行せず、「ガベージコレクション」自体を実行するよりも優れています。