簡體   English   中英

使用動態SQL從存儲過程填充臨時表

[英]Filling Temporary Table From Stored Procedure Using Dynamic SQL

我正在嘗試使用使用動態SQL執行的存儲過程的結果填充預定義的臨時表。 該臨時表位於另一個存儲過程中,並在填充后作為結果集的一部分返回。 創建表並插入數據的代碼如下:

CREATE TABLE #MyTable
(
    As_Of_Date DATE NULL,
    Fund VARCHAR(50) NULL,
    Code VARCHAR(100) NULL,
    Amount FLOAT NULL
);

DECLARE @SQL NVARCHAR(MAX) = '';

SELECT @SQL = @SQL + 'INSERT INTO #MyTable
                          EXEC [dbo].[p_UI_Get_My_Tables_Data] ''' + CONVERT(VARCHAR, As_Of_Date, 23) + ''', ''' + @Fund + ''';'
FROM #AsOfDates;

EXEC sp_executesql @SQL;

SELECT *
FROM #MyTable
ORDER BY Fund, Code, As_Of_Date;

p_UI_Get_My_Tables_Data的最后p_UI_Get_My_Tables_Data語句如下所示:

SELECT
    @AsOfDate AS As_Of_Date, Fund, Code, SUM(Amount) AS Amount
FROM        
    #DetailedData
GROUP BY    
    Fund, Print_Group;

我嘗試從我的應用程序和SQL Server中執行此代碼,通常會收到一條錯誤消息,內容為

列名或提供的值數與表定義不匹配

我已經檢查了代碼,並嘗試p_UI_Get_My_Tables_Data運行p_UI_Get_My_Tables_Data ,據我所知,該表已以正確的格式返回。 但是,有一件事我覺得很奇怪。

如果我在SQL Server中打開一個新查詢並首先運行我的主存儲過程,則會收到錯誤消息。 但是,如果我p_UI_Get_My_Tables_Data自己運行p_UI_Get_My_Tables_Data ,那么我的主存儲過程將開始正常工作。 它會在SQL Server中繼續工作一小會兒,但是從我的應用程序中調用時總是會失敗。

我嘗試了其他獲取所需數據的方法,但沒有一個令人滿意。 我嘗試將@MyTable切換到全局臨時表,但遇到相同的錯誤。 我不能使用表函數,因為p_UI_Get_My_Tables_Data使用臨時表。 OPENROWSET一下OPENROWSET但開始遇到配置錯誤,並認為它不是最佳解決方案。

我認為有一種方法可以完成我想做的事情,因為它在部分時間內起作用,但就某些時候為什么它失敗了,我一定會有所遺漏。 有人可以提供的任何建議將不勝感激。

編輯:一件行之有效的事情,但顯然並不理想,它是從我的應用程序運行p_UI_Get_My_Tables_Data並忽略結果,然后運行實際的存儲過程。 這是使它在SQL Server中正常工作的相同方法,但是我不知道為什么有必要這樣做,並且希望使用更干凈的解決方案。

我想知道為什么您要使用Dynamic SQL,但以下各項不能做到這一點:

declare @TempTable table (As_Of_Date varchar(10), Done bit default(0));
declare @As_Of_Date varchar(10);

insert into @TempTable
  select CONVERT(VARCHAR, As_Of_Date, 23)
  from #AsOfDates;

while exists (select 1 from @TempTable where Done = 0) begin
  select top 1 @As_Of_Date = As_Of_Date from @TempTable
  INSERT INTO #MyTable
    EXEC [dbo].[p_UI_Get_My_Tables_Data] @As_Of_Date, @Fund;
  update @TempTable set Done = 1 where @As_Of_Date = As_Of_Date
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM