2017-03-23 71 views
3

我想在不預先定義臨時表的列的情況下將存儲過程的值插入臨時表中。如何在不聲明臨時表列的情況下將存儲過程的結果插入臨時表中

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; 
+0

我們正在使用多個存儲過程和列輸出的數量可能會改變。從維護立場來看,編寫服務器名稱可能不是一個好方法 –

+0

聽起來這裏有一些設計問題。你正在創建一個proc來統治他們。這就像在一個可以完成任何事情的dotnet類中創建單一方法。 –

+1

那麼爲什麼你不使用表值函數而不是存儲過程。您將可以直接選擇結果。 –

回答

0

沒有人說,它必須是漂亮規定:

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; 
+0

這究竟是什麼。 – DtechNet

相關問題