簡體   English   中英

如何在不聲明臨時表列的情況下將存儲過程的結果插入到臨時表中

[英]How to insert result of Stored Procedure into Temp Table without declaring Temp Table Columns

我想在不預定義臨時表的列的情況下將存儲過程的值插入到臨時表中。

Insert Into #Temp1 Exec dbo.sp_GetAllData @Name = 'Jason'.

我怎樣才能做到這一點 ? 我看到了如下選項,但我可以不提及服務器名稱嗎?

SELECT * INTO #TestTableT FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',
'EXEC tempdb.dbo.GetDBNames')
-- Select Table
SELECT *
FROM #TestTableT;

沒有定義臨時表模式和編寫服務器名稱,我找不到可能的解決方案。 因此,我將代碼和查詢更改為僅使用已知架構進行處理。 代碼示例如下

    CREATE TABLE #TestTable ([name] NVARCHAR(256), [database_ID] INT);
    INSERT INTO #TestTable
    EXEC GetDBNames

    SELECT * FROM #TestTable;

如鏈接https://blog.sqlauthority.com/2013/05/27/sql-server-how-to-insert-data-from-stored-procedure-to-table-2-different-methods/所述

沒有人說它必須漂亮:

CREATE PROCEDURE p AS
SELECT 1 as x, 2 as y, 3 as z

DECLARE c CURSOR FOR
SELECT 
name, system_type_name
FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('p'), 0);
DECLARE @name sysname, @type sysname;

CREATE TABLE #t(fake int)

OPEN c
FETCH NEXT from c into @name, @type
WHILE (@@FETCH_STATUS = 0)
BEGIN

 EXEC ('ALTER TABLE #t ADD ' + @name + ' ' + @type)
 FETCH NEXT from c into @name, @type
END

CLOSE C
DEALLOCATE c
ALTER TABLE #t DROP COLUMN fake;

INSERT INTO #t EXEC p;

暫無
暫無

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

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