有没有办法返回用TVP插入的对象的ID?

时间:2015-03-25 07:26:20

标签: c# sql-server sql-server-2008 stored-procedures table-valued-parameters

我正在使用大量产品的tvp进行插入。插入后我需要这些产品的ID。存储过程插入后是否有任何安全的方法可以立即获取它们?

2 个答案:

答案 0 :(得分:2)

我假设您要返回插入的ID。您可以使用OUTPUT子句和魔术表inserted来返回所需内容。

CREATE TYPE product_type AS TABLE(name VARCHAR(100), barcode INT);

CREATE TABLE products(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
                      name VARCHAR(100), barcode INT);

CREATE PROCEDURE dbo.my_insert_product
   @products product_type READONLY
AS
BEGIN
   INSERT INTO products(name, barcode)
   OUTPUT inserted.ID, inserted.name   -- add columns you need
   SELECT name, barcode
   FROM @products;
END;

通话:

DECLARE @t AS product_type;

INSERT INTO @t
VALUES ('Product1', 1), ('Product2', 2), ('Product3', 2),
       ('Product4', 3), ('Product5', 4), ('Product6', 5);

EXEC dbo.my_insert_product @t;

SqlFiddleDemo

答案 1 :(得分:0)

使用MERGE,您可以通过INSERT从TVP输出值(无任何理由)。您可以向TVP添加一个唯一键,以便您的应用了解哪些行获得了ID。