2011-01-17 19 views
2

ストアドプロシージャの結果セットから直接SQL Serverテーブルに挿入する方法について2つの質問があります。ストアドプロシージャから選択してテーブルに挿入

私は二つのことをしたい:

  1. は私が結果セットと私はそれらの結果セットに挿入するテーブルを得るためにそれを呼んでいるSPは、同じデータベースにありません。ここには、それに挿入するローカルデータベースと、リモートIPアドレスから呼び出されるSPがあります。私はどのようにSPと私はそれを挿入するINSERT INTO ... SELECT節を使用したいと思っているので、それを挿入するWeb.Configファイルの接続文字列を宣言する必要があります知ってほしい私のローカルテーブルに。

  2. 私のテーブルのいくつかの列は、その値がSPにないので、自分の値をそれらに置く必要があります。どのように私のテーブルの任意の行が自分自身で計算され、SPの結果セットの値に無関係な列の値を取得することができますこの操作を行うことができます。

あなたのご回答をいただければ幸いです。

答えて

3

1は、私は基本的に私は私のWeb.Configファイルに接続文字列を宣言するべきか

を知りたい、あなたのローカルのSQL Serverに接続するように設定しました。必要なことは、ローカルSQL Serverへのログインが、リモートデータベースへのリンクされたサーバーログインで設定され、リモートサーバーがローカルSQL Serverへのリンクサーバーとして追加されていることを確認することです。リンクされたサーバーのログインは、このローカルユーザーが特定のリモートサーバーに接続するときに、指定されたログイン詳細を使用するよう指定します。

ここは開始する場所の1つですhttp://msdn.microsoft.com/en-us/library/aa213778%28v=sql.80%29.aspx

2、私のテーブルのいくつかのカラムがあり、その値はSPにはなく、私は自分の値をそれらに置くべきです。

一時テーブルを経由する必要があります。ストアドプロシージャから列の選択 - のは、それが6列

INSERT #localtable (a,b,c,d,e,f) 
EXEC remote.sql.dbo.SomeSProc 1, 'a' 

#localtableは、SQL Server

INSERT finaltable (a,b,x,c,d,y,e,f) 
SELECT a,b, 1 , c,d, 'test' , e,f 
FROM #localtable 
0

最終的な宛先にその一時テーブルから挿入し、その後、結果セット に等しい列を持つ必要があります提供しましょう結果セット

非常に良い点: http://blog.sqlauthority.com/2013/09/26/sql-server-select-columns-from-stored-procedure-resultset/

まず我々はWILサンプルストアドプロシージャを作成します。

CREATE PROCEDURE SampleSP 
AS 
SELECT 1 AS Col1, 2 AS Col2 
UNION 
SELECT 11, 22 
GO 

ここで、ストアドプロシージャの結果セットを一時的に保存するテーブルを作成します。 INSERT INTOコマンドとEXECコマンドを使用して値を取得し、一時テーブルに挿入します。

CREATE TABLE #TempTable (Col1 INT, Col2 INT) 
GO 
INSERT INTO #TempTable 
EXEC SampleSP 
GO 

次に、ストアドプロシージャからデータを取得します。

SELECT * 
FROM #TempTable 
GO 

最後に、作成したすべてのオブジェクトをクリーンアップします。

DROP TABLE #TempTable 
DROP PROCEDURE SampleSP 
GO 
+0

これはどのように受け入れられた回答と異なっていますか?また、この回答は、リモートサーバー上のストアドプロシージャの問題には対処しません。 –

関連する問題