Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql T-SQL无序插入_Tsql_Sql Server 2008 - Fatal编程技术网

Tsql T-SQL无序插入

Tsql 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

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

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抱怨我没有指定该表可用的所有变量

返回的数据集可能相当大,因此出于明显的原因,我希望避免循环等


感谢您的帮助。

您已在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,则查询将失败。