2010-05-17 70 views
1

基本上我有一個用戶定義表類型(用作表值變量),我在有效地調用另外兩個存儲過程的存儲過程中引用它,然後插入那些值轉換爲表格類型。T-SQL不按順序插入

標識EST

INSERT INTO @tableValuedVariable (var1, var2, var3, var4, var5) 
     EXEC [dbo].StoredProcedure1; 

INSERT INTO @tableValuedVariable (var1, var2, var5) 
     EXEC [dbo].StoredProcedure2; 

您可以大概已經告訴我什麼都問。基本上StoredProcedure2只返回表格被設置爲保留的一些值,我希望其他變量僅爲null(定義爲默認值)。只有SQL抱怨我沒有指定可用於該表的所有變量。

返回數據集可能相當大,所以我想避免出現循環等原因很明顯。

感謝您的任何幫助。

回答

1

您已經列出INSERT子句中的所有列以匹配存儲過程中的所有列。

現在,如果存儲的proc返回var1, var2, var5那麼INSERT子句中應該不需要指定var3, var4,如果它們爲NULLable。 (編輯:當然,正如Mike Burton指出的那樣,如果列不爲NULL,它將會失敗)

如果存儲過程返回var1, var2, var3, var4, var5那麼在INSERT子句中需要全部5個:不能忽略來自存儲proc並允許它們默認。

您可以在存儲過程更改爲UDF和SELECT var1, var2, var5 FROM mynewUDF()

+1

,當然,如果有被忽略的列是NOT NULL,查詢將失敗。 – 2010-05-17 15:49:22

0

這個工作對我來說:

CREATE PROCEDURE prc_test_1 
AS 
     SELECT 1 AS id, 2 AS id2 

GO 

CREATE PROCEDURE prc_test_2 
AS 
     SELECT 1 AS id 

GO 

DECLARE @tv TABLE (id INT, id2 INT) 

INSERT 
INTO @tv 
EXEC prc_test_1 

INSERT 
INTO @tv (id) 
EXEC prc_test_2 

SELECT * 
FROM @tv