Tsql T-SQL无序插入
基本上,我有一个用户定义的表类型(用作表值变量),我在一个存储过程中引用它,该存储过程实际上只调用另外两个存储过程,然后将这些值插入表类型 Id estTsql T-SQL无序插入,tsql,sql-server-2008,Tsql,Sql Server 2008,基本上,我有一个用户定义的表类型(用作表值变量),我在一个存储过程中引用它,该存储过程实际上只调用另外两个存储过程,然后将这些值插入表类型 Id est INSERT INTO @tableValuedVariable (var1, var2, var3, var4, var5) EXEC [dbo].StoredProcedure1; INSERT INTO @tableValuedVariable (var1, var2, var5) EXEC [dbo
INSERT INTO @tableValuedVariable (var1, var2, var3, var4, var5)
EXEC [dbo].StoredProcedure1;
INSERT INTO @tableValuedVariable (var1, var2, var5)
EXEC [dbo].StoredProcedure2;
你可能已经知道我要问什么了。基本上,StoredProcedure2只返回表设置为保留的几个值,我希望其他变量仅为null(定义为默认值)。只有SQL抱怨我没有指定该表可用的所有变量
返回的数据集可能相当大,因此出于明显的原因,我希望避免循环等
感谢您的帮助。您已在INSERT子句中列出所有列,以匹配存储过程中的所有列 现在,如果存储的proc返回
var1、var2、var5
,那么如果它们可以为null,则不需要在INSERT子句中指定var3、var4
。(编辑:当然,正如Mike Burton指出的那样,如果列不为空,那么它将失败)
如果存储过程返回var1、var2、var3、var4、var5
,那么您需要INSERT子句中的所有5个:您不能忽略存储过程中的列并允许它们默认
您可以将存储过程更改为udf,并从mynewUDF()中选择var1、var2、var5()您已经在INSERT子句中列出了所有列,以匹配存储过程中的所有列 现在,如果存储的proc返回
var1、var2、var5
,那么如果它们可以为null,则不需要在INSERT子句中指定var3、var4
。(编辑:当然,正如Mike Burton指出的那样,如果列不为空,那么它将失败)
如果存储过程返回var1、var2、var3、var4、var5
,那么您需要INSERT子句中的所有5个:您不能忽略存储过程中的列并允许它们默认
您可以将存储的进程更改为udf,然后从mynewUDF()中选择var1、var2、var5。这对我很有用:
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
这对我很有用:
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
当然,如果任何被忽略的列不为NULL,则查询将失败。当然,如果任何被忽略的列不为NULL,则查询将失败。