基本上我有一个用户定义的表类型(用作表值变量),我在存储过程中引用它实际上只调用其他两个存储过程,然后将这些值插入表类型。< / 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抱怨我没有指定该表可用的所有变量。
返回数据集可能相当大,所以我想避免循环,原因很明显。
感谢您的帮助。
答案 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