2009-04-10 37 views
34

MS SQL 2005で一時ストアドプロシージャまたは関数を作成する機会はありますか?私はこのストアドプロシージャを私のクエリでのみ使用したいので、実行後には消えてしまいます。T-SQLの一時関数またはストアドプロシージャ

私はいくつかのデータに対してEXECに質問します。しかし、私はこのコマンドを処理するテーブルごとに、その一部を変更する必要があります。だから、私が提供する引数(テーブル名など)からクエリを返し、EXECでこのクエリを実行する一時的なSPを作成すると考えました。

このストアドプロシージャは私にとってはあまり役に立ちませんので、一時的にしておきたいので、クエリの実行が終了すると消えてしまいます。

+1

あなたのコメント –

答えて

27

あなたの編集は、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ごとではなく、接続ごとにあります。

しかし、Common Table Expressionsを見てみるとよいでしょう。それらは、後で読むことができます(一度だけ読むことができます)。

もしあなたがしようとしていることを明確にすることができたら、を実行する

+0

「一時ストアドプロシージャ」のビットを明確にすることはできますか? sp_prepareまたはsp_executesqlを意味しますか? – gbn

+1

私は何をしようとしているかについてもう少し詳しく説明しました。私の考えを理解するのに役立つことを願っています。 –

+1

CTEに言及して+1してください! SQL Server 2005で大幅に使用されていない機能... –

-3

クエリ内にストアドプロシージャのSQLを使用するだけです。 DB内でストアドプロシージャを作成する必要はありません。クエリ内の通常のクエリよりも利点がありません。

+14

を編集しましたが、これはストアドプロシージャコードの再利用を許可していません。 – Tone

26

この質問は少し古いですが、他の回答は一時的な手順を作成するための構文を提供できませんでした。構文は、テンポラリテーブルの場合と同じです。ローカルテンポラリオブジェクトの場合は#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単体テストのコードを重複排除しています。実際の単体テストフレームワークは良いでしょうが、これは何もないより優れていて、それ自体は "ガベージコレクト"します。

+2

そして機能についてはどうですか? SELECT COLUMN式でそれらを使用できるようにするには? – jgomo3

関連する問題