SQL Server 根據存儲過程的結果集創建臨時表


   最近見很多人問到如何根據一個存儲過程的結果集創建臨時表,如果存儲過程的結果集字段固定則可以事先建好再寫入數據,但如果結果集不固定就無法事先建了,下面來測試下如何根據不定字段結果集創建臨時表。

SELECT * INTO #temp_table FROM OPENDATASOURCE('SQLOLEDB','Data Source=.;User ID=sa;Password=sa2014').'test.dbo.sp_t 2'


SELECT * INTO #temp_table  FROM  OPENROWSET('SQLNCLI', 'Server=.;Trusted_Connection=yes;','EXEC test.dbo.sp_t 2') temp

 

如果執行報,"鏈接服務器"(null)"的 OLE DB 訪問接口 "SQLNCLI11" 返回了消息 "登錄超時已過期",錯誤。在配置管理器中開啟實例的TCP\IP協議即可。

 

但對於有參數的存儲過程怎么處理呢?OPENDATASOURCE和OPENROWSET都不支持傳參,目前我所能想到的方法是使用動態SQL(如有其它方法的可以告訴我一下哈),示例如下。

DECLARE @a VARCHAR(2)='2';
DECLARE @str VARCHAR(100)='EXEC test.dbo.sp_t '+@a,@s NVARCHAR(max);
SET @s= 'SELECT a.* INTO #tt  FROM  OPENROWSET(''SQLNCLI'', ''Server=.;Trusted_Connection=yes;'','''+@str+''') temp';

EXEC(@s);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM