0

SQL Server 2008では、CTEを含むストアドプロシージャがあります

;with t1 as (select * from db..tablename where …)
Select * from t1;

tablenameストアドプロシージャのパラメータの1つとして使用したいと思います。

T1サイズが大きすぎて次のようなものを使用できないことに注意してください

Exec(‘select * into #temptable from db..’+’tablename’+’ where …’)

同様の質問と回答がありましたが、どれも役に立たないようです。

ありがとう

4

1 に答える 1

0

私は CTE を使用するのが大好きです。彼らはとても素晴らしいユーティリティです!

この特定の問題については、反対することをお勧めします。テーブルに相当するデータを別のストアド プロシージャに「転送」していることを考えると、少し異なる方法で処理する必要があると思います。

最初のプロシージャを考えてみましょう:

IF OBJECT_ID('SomeTempTable') IS NOT NULL DROP SomeTempTable;

SELECT
    *
INTO SomeTempTable
FROM
YourOtherTable

EXEC YourSecondProcedureName

テーブルに必要な範囲に注意する必要があることに注意してください。あなたがそのことを考慮するまで、私は作業コードを含めていません。詳細については、こちらを参照してください:一時テーブルのスコープ

また、"YourSecondProcedureName" は現在、テーブル値を取らないことに注意してください。代わりに (そして適切な範囲で)、一時テーブルから名前で呼び出すことができます。また、完了したら一時テーブルを削除することもベストプラクティスと見なされますが、SQL Server にはバージョンに応じていくつかのメカニズムがあり、それらの一部を実行できます。再びスコープスコープスコープ。

お役に立てれば!

マット

于 2013-01-28T19:04:58.513 に答える