0
我正在做一個使用大量產品的tvp插入。插入後,我需要這些產品的ID。存儲過程插入後是否有任何安全的方法讓它們直立?有什麼方法可以返回用TVP插入的對象的ID嗎?
我正在做一個使用大量產品的tvp插入。插入後,我需要這些產品的ID。存儲過程插入後是否有任何安全的方法讓它們直立?有什麼方法可以返回用TVP插入的對象的ID嗎?
我假設你想要返回插入的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;
隨着MERGE
你可以從TVP它(無任何正當理由)是不可能的INSERT
輸出值。您可以向TVP添加一個唯一的密鑰,以便您的應用瞭解哪些行收到了什麼ID。
您可以通過加入您的TVP和獨特列的原始表格並使用SELECT語句返回所需的列。 – 2015-03-25 07:31:42
在我知道它的安全的其他tvp插入我只是選擇最新的對象。但是在這種情況下,可以同時對db執行幾次插入操作。我正在考慮從第二個答案這裏的技術: http://stackoverflow.com/questions/8022682/how-can-i-use-a-table-valued-parameter-to-insert-multiple-rows-and-then -return-t 但我不確定它是否安全 – kali 2015-03-25 07:33:12
@kali除了ID以外,每個產品都有唯一的列嗎? – 2015-03-25 07:47:05