3

SQL Serverでは、ストアドプロシージャの結果からその場で一時テーブルを作成する方法はありません。

CREATE TABLE #temptable AS
EXEC spMyStoredProc

また

EXEC spMyStoredProc INTO #temptable

またはそのようなもの。代わりに、事前にSPレイアウトを知っておく必要があり、次のようなことを行う必要があります。

CREATE TABLE #temptable (col1 INT, col2 VARCHAR(255))

INSERT INTO #temptable
EXEC spMyStoredProc

これが当てはまる機能的な理由はありますか?たぶんSQLServerの制限ですか?それとも、SQL仕様にまだ追加されていないものであり、いつか彼らがそれをサポートすることを期待できますか?

4

4 に答える 4

10

ストアドプロシージャは、多くの結果セットを返す場合と、まったく返さない場合があり、ストアドプロシージャの実行によって完全に異なる場合があります。

それがコンパイルされるとき、それのメ​​タ情報はそれが特定の期待できる結果セット出力を持っているとは記述しません。

これらの制約を考えると、ストアドプロシージャが返す可能性のあるものの強い型付けがないため、これを実装しないことを選択したと思います。

于 2009-07-16T15:38:26.740 に答える
0

このような機能が必要な場合は、次のようなインラインUDFを使用します。

CREATE PROCEDURE MySample
AS
SELECT a,b,c FROM dbo.MyInlineUDF(1,2,3)
GO

SELECT * INTO #t
FROM dbo.MyInlineUDF(1,2,3) WHERE 1=0

INSERT INTO #t EXEC MySample
于 2009-07-16T16:25:49.157 に答える
0

sprocからではありませんが、テーブル値関数を使用して同様のことを行うことができます。

Select * From fnMyFunction

必要に応じて、#テーブルに挿入できます。

于 2009-07-16T15:38:09.940 に答える
0

これを試してみてください

DECLARE @temptable TABLE (ID INT, NAME VARCHAR(255))

declare @query varchar(max)

set @query='Select whatever from whereever'

INSERT INTO @temptable

EXEC (@Query)

select *from @temptable
于 2009-07-16T15:40:22.057 に答える