20

SQL Server では、返されたストアド プロシージャの結果セットを次のように挿入できます。

DECLARE @T TABLE (
  ID int,
  Name varchar(255),
  Amount money)

INSERT INTO @T
exec dbo.pVendorBalance 

これは、ストアド プロシージャが 1 つの結果セットのみを返す限り機能します。

ストアド プロシージャが複数の結果セットを返す場合、これを機能させる方法はありますか?

例えば

DECLARE @T1 (...)
DECLARE @T2 (...)

INSERT INTO @T1 THEN INTO @T2
exec dbo.pVendorBalance 
4

7 に答える 7

-1

実際には、ストアド プロシージャは複数の結果セットを返すことも、結果セットを返さないこともあります。かなり恣意的です。このため、ストアド プロシージャを呼び出す他の SQL コードからこれらの結果をナビゲートする方法がわかりません。

ただし、テーブル値のユーザー定義関数から返された結果セットを使用することはできます。これは通常の UDF と同じですが、スカラー値を返す代わりにクエリ結果を返します。その後、その UDF を他のテーブルと同様に使用できます。

INSERT INTO @T SELECT * FROM dbp.pVendorBalanceUDF()

http://technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx

于 2013-11-04T15:38:38.060 に答える
-1
DROP TABLE ##Temp

DECLARE @dtmFrom VARCHAR(60) = '2020-12-01 00:00:00', @dtmTo VARCHAR(60) = '2020-12-02 23:59:59.997',@numAdmDscTransID VARCHAR(60) =247054


declare @procname nvarchar(255) = 'spGetCashUnpaidBills', 
        @procWithParam nvarchar(255) = '[dbo].[spGetCashUnpaidBills]  @dtmFromDate= ''' +@dtmFrom+ ''' ,@dtmToDate= ''' +@dtmTo+''',@numCompanyID=1,@numAdmDscTransID='+ @numAdmDscTransID +',@tnyShowIPCashSchemeBills=1',
        @sql nvarchar(max),
        @tableName Varchar(60) = 'Temp'

set @sql = 'create table ##' + @tableName + ' ('
begin
        select      @sql = @sql + '[' + r.name + '] ' +  r.system_type_name + ','
        from        sys.procedures AS p
        cross apply sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r
        where       p.name = @procname 

        set @sql = substring(@sql,1,len(@sql)-1) + ')'
        execute (@sql)
        execute('insert ##' + @tableName + ' exec ' + @procWithParam)
end

SELECT *FROM ##Temp
于 2020-12-02T06:20:01.147 に答える