Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
Sql 在插入过程中向表值参数添加附加列_Sql_Sql Server_Tsql_Sql Insert_Table Valued Parameters - Fatal编程技术网

Sql 在插入过程中向表值参数添加附加列

Sql 在插入过程中向表值参数添加附加列,sql,sql-server,tsql,sql-insert,table-valued-parameters,Sql,Sql Server,Tsql,Sql Insert,Table Valued Parameters,给定以下表格类型: /* Create a table type. */ CREATE TYPE TestType AS TABLE (someNumber int, someOtherNumber int); GO 我将此表类型传递给存储过程。在这个存储过程中,我想将TestType中的数据添加到表dbo.someTable,其中包含一个额外的idsomeId(与TestType中的所有行相同)。向TestType中的所有行添加someId的最佳方法

给定以下表格类型:

/* Create a table type. */
CREATE TYPE TestType
   AS TABLE
      (someNumber      int,
       someOtherNumber int);
GO
我将此表类型传递给存储过程。在这个存储过程中,我想将
TestType
中的数据添加到表
dbo.someTable
,其中包含一个额外的id
someId
(与
TestType
中的所有行相同)。向
TestType
中的所有行添加
someId
的最佳方法是什么

CREATE PROCEDURE dbo.Test @TVP TestType READONLY
AS
    BEGIN
    SET NOCOUNT ON

    DECLARE @someId int;
    SET @someId = 10;

    INSERT INTO dbo.someTable
        (someId,
         someNumber,
         someOtherNumber)
        VALUES
         -- here I want to add all rows from @TVP.
         -- However, @TVP only has the columns someNumber and someOtherNumber.
         -- The column someId is missing. What is the most efficient way
         -- to add the @someId to all rows during insert?
         -- Note that @someId shall be the same value for all rows in @TVP.
    END;
GO

只需从table参数中选择,并添加一个具有常量值的列:

INSERT INTO dbo.someTable (someId, someNumber, someOtherNumber)
SELECT @someId, someNumber, someOtherNumber 
FROM @TVP

只需从table参数中选择,并添加一个具有常量值的列:

INSERT INTO dbo.someTable (someId, someNumber, someOtherNumber)
SELECT @someId, someNumber, someOtherNumber 
FROM @TVP

这是最有效的方法

CREATE PROCEDURE dbo.Test 
@TVP TestType READONLY
AS
    BEGIN
    SET NOCOUNT ON

    DECLARE @someId int;
    SET @someId = 10;

    INSERT INTO dbo.someTable
        (someId,
         someNumber,
         someOtherNumber)
        VALUES
          @SomeId
         ,SomeNumber
         ,SomeOtherNumber
    END;
GO

这是最有效的方法

CREATE PROCEDURE dbo.Test 
@TVP TestType READONLY
AS
    BEGIN
    SET NOCOUNT ON

    DECLARE @someId int;
    SET @someId = 10;

    INSERT INTO dbo.someTable
        (someId,
         someNumber,
         someOtherNumber)
        VALUES
          @SomeId
         ,SomeNumber
         ,SomeOtherNumber
    END;
GO

你不能改变TVP;您必须使用不同的对象。谢谢,我知道我不能直接更改TVP。我也不想这样做,我只需要在插入时添加一个值,这样就可以执行某种set操作,从TVP向列中添加一列并返回一个新表;您必须使用不同的对象。谢谢,我知道我不能直接更改TVP。我也不想这样做,我只需要在插入时添加一个值,这样就可以执行某种set操作,从TVP向列添加一列并返回一个新表。