基本上,我有一个用户定义的Table type (用作表值变量),我在一个存储过程中引用它,它实际上只是调用另外两个存储过程,然后将这些值插入到table类型中。
Id估计
INSERT INTO @tableValuedVariable (var1, var2, var3, var4, var5)
EXEC [dbo].StoredProcedure1;
INSERT INTO @tableValuedVariable (var1, var2, var5)
EXEC [dbo].StoredProcedure2;
你可能已经知道我要问什么了。基本上,StoredProcedure2只返回表中设置为保存的一小部分值,我希望其他变量只为null (定义为默认值)。只有SQL在抱怨我没有指定该表的所有可用变量。
由于显而易见的原因,返回数据集可能相当大,因此我希望避免循环等。
谢谢你的帮助。
发布于 2010-05-17 23:44:39
您已经在INSERT子句中列出了所有列,以匹配存储过程中的所有列。
现在,如果存储过程返回var1, var2, var5
,那么如果它们为NULLable,则不需要在INSERT子句中指定var3, var4
。(编辑:当然,正如Mike Burton指出的那样,如果列不为空,它将失败)
如果存储过程返回var1, var2, var3, var4, var5
,那么在INSERT子句中需要全部5:不能忽略存储过程中的列而允许它们为默认值。
您可以将存储的proc更改为udf和SELECT var1, var2, var5 FROM mynewUDF()
发布于 2010-05-17 23:48:20
这对我来说很有效:
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
https://stackoverflow.com/questions/2850479
复制相似问题