2011-01-20 4 views
3

したがって、このストアドプロシージャにはDATETIMEパラメータの日付が入ります。その値を別のテーブルに挿入し、そのIDを返します。INSERT INTO内からストアドプロシージャを呼び出す

このストアドプロシージャgetTimeIDを呼び出すことができます。 DimTimeはテーブルで、DATETIMEパラメータを挿入します。

私はIDと日付ではなく、TableB IDとTimeIDにコピーしたいと思います。

私がしようとしている:

INSERT INTO [TableA].dbo.Main (ID, timeID) 
SELECT ID, 
     (EXEC getTimeID date) 
FROM  [TableB].dbo.Main 
をしかし、私はEXEC上の構文は動作させることはできません。

助けてください。

+0

あなたは、1つのステートメントでは、すべての行(ID、日付)を選択しますかtableAから取得しますが、日付を変換して(別のテーブルに挿入しIDを取得する)各行のSPを呼び出し、そのTimeIDを(各行ごとに)tableBに使用しますか? – RichardTheKiwi

答えて

6

ストアドプロシージャから挿入するための構文は次のとおりです。

INSERT INTO TheTable (col1, col2) EXEC TheStoredProcedure 

それは非常に柔軟性のないです:テーブルは、ストアドプロシージャの正確な列のレイアウトと一致しなければなりません。

可能な解決策の1つは、ストアドプロシージャの結果をテーブル変数に格納することです。たとえば、次のように

declare @id int 
select @id = ID 
from [TableB].dbo.Main 

declare @t table (TimeID int) 
insert @t (TimeID) exec getTimeID '2011-01-20' 

declare @TimeID int 
select @TimeID = TimeID 
from @t 

insert [TableA].dbo.Main values (@ID, @TimeID) 
+0

が働いた。ありがとう! – heero101086

0

あなたが巣にあなたのストアド・プロシージャ・コールをしたいか、動的SQLを使用しようとしているなら、あなたは一時テーブルの代わりにテーブル変数を使用してしまいます。あなたはまだ、前もってテーブルを定義する必要がありますが、あなたはこのようにそれを移入されます:あなたの特定のシナリオがうまく機能するためにAndomarが示唆

INSERT INTO #t EXEC sp_executesql @cmd

他のプロセスを。

あなたがが、私は関数にそのストアドプロシージャを変換します能力を持っているし、そしてちょうど使用している場合:

INSERT INTO [TableA].dbo.Main (ID, timeID) 
SELECT ID, 
     dbo.getTimeID(date) 
FROM [TableB].dbo.Main 
関連する問題