T-SQL乱序插入

时间:2010-05-17 15:40:07

标签: tsql sql-server-2008

基本上我有一个用户定义的表类型(用作表值变量),我在存储过程中引用它实际上只调用其他两个存储过程,然后将这些值插入表类型。< / p>

Id est

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

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

你可能已经知道我要问的是什么。基本上StoredProcedure2只返回表设置为保持的一些值,我希望其他变量只是为null(定义为默认值)。只有SQL抱怨我没有指定该表可用的所有变量。

返回数据集可能相当大,所以我想避免循环,原因很明显。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您已列出INSERT子句中的所有列,以匹配存储过程中的所有列。

现在,如果存储的proc返回var1, var2, var5,那么如果它们是NULLable,则不需要在INSERT子句中指定var3, var4。 (编辑:当然,正如Mike Burton指出的那样,如果列是非NULL,它将失败)

如果存储过程返回var1, var2, var3, var4, var5,则需要INSERT子句中的全部5:您不能忽略存储过程中的列并允许它们默认。

您可以将存储过程更改为udf和SELECT var1, var2, var5 FROM mynewUDF()

答案 1 :(得分: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