2010-05-17 64 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