none
sp_executesql を使用して、リンクサーバーでストアドプロシージャを実行、結果を一時テーブルにINSERTする。 RRS feed

  • 質問

  • sp_executesql を使用して、リンクサーバーで引数付ストアドプロシージャを実行、その結果を一時テーブル(#Temp)にINSERTしたいのですが、下記のケースはどのようにコードを記載すればいいのですか?  下記のParam1は NVARCHAR(String)の引数です。

    DECLARE @TSQL NVARCHAR(MAX)

    DECLARE @TSQL2 NVARCHAR(MAX)

    DECLARE @SRV_NAME VARCHAR(100)

    SET @TSQL = 'EXEC dbo.sp_sampleStoredProc ''''Param1'''''

    SET @SRV_NAME = '[LinkedServerName]'

    SET @TSQL2 = N'EXEC(''' + @TSQL + ''') AT ' + @SRV_NAME + ''

    EXEC sp_executesql @TSQL2

    2014年11月10日 7:27

回答

  • EXEC sp_executesql @TSQL2に替えてこんなかんじでどうでしょうか

    CREATE TABLE #tempTable(・・・・);
    DECLARE @x varchar(max)
    SET @x = 'insert into #tempTable ' + @TSQL2
    EXEC(@x)
    SELECT * FROM #tempTable

    • 回答としてマーク happy4u 2014年11月10日 13:46
    2014年11月10日 8:50

すべての返信

  • EXEC sp_executesql @TSQL2に替えてこんなかんじでどうでしょうか

    CREATE TABLE #tempTable(・・・・);
    DECLARE @x varchar(max)
    SET @x = 'insert into #tempTable ' + @TSQL2
    EXEC(@x)
    SELECT * FROM #tempTable

    • 回答としてマーク happy4u 2014年11月10日 13:46
    2014年11月10日 8:50
  • yamsaki1972さん、

    少しばかり、他の問題がでてきましたが、何とか解決できました。どうもありがとうございました。

    Error:  msg 7391 level 16 state 2 line 1 -the operation could not be performed because ole db provider "aseoledb" for linked server "" was unable to begin a distributed transaction. (SYBASE)

    追加で、下記のスクリプトの実行しました。

    ************************************************** 

    EXEC master.dbo.sp_serveroption
         @server = N'[
    LinkedServerName]',
         @optname = N'remote proc transaction promotion',
         @optvalue = N'false'

    ***************************************************

    happy4u

    • 回答としてマーク happy4u 2014年11月10日 13:42
    • 回答としてマークされていない happy4u 2014年11月10日 13:46
    2014年11月10日 13:42