2015-03-25 55 views
0

我正在做一個使用大量產品的tvp插入。插入後,我需要這些產品的ID。存儲過程插入後是否有任何安全的方法讓它們直立?有什麼方法可以返回用TVP插入的對象的ID嗎?

+0

您可以通過加入您的TVP和獨特列的原始表格並使用SELECT語句返回所需的列。 – 2015-03-25 07:31:42

+0

在我知道它的安全的其他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

+0

@kali除了ID以外,每個產品都有唯一的列嗎? – 2015-03-25 07:47:05

回答

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

0

隨着MERGE你可以從TVP它(無任何正當理由)是不可能的INSERT輸出值。您可以向TVP添加一個唯一的密鑰,以便您的應用瞭解哪些行收到了什麼ID。

相關問題