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