データベースへの 1 回の呼び出しで複数の挿入を行うために、ストアド プロシージャでテーブル値パラメーターを使用することを検討しています。
テーブル値パラメーターには、多かれ少なかれ、挿入先のテーブルの定義を反映する情報が含まれています。ID 列が欠落しているだけです。
次のテーブル定義がある場合:
Create Table Product
(
ProductID int,
ProductName varchar(100),
ProductDesc varchar(4000),
ProductCost int
)
タイプ定義:
Create Type ProductTable as Table
(
ProductName varchar(100),
ProductDesc varchar(4000),
ProductCost int
)
およびストアド プロシージャの定義:
Create Procedure usp_Product_Insert
@Products ProductTable READONLY
AS
INSERT Product
(
ProductID,
ProductName,
ProductDesc,
ProductCost
)
SELECT
(Select ISNULL(Max(ProductID),0) + 1 From Product),
P.ProductName,
P.ProductDesc,
P.ProductCost
FROM
@Products P
パラメータに複数のデータ セットがある場合、一意の ID を挿入する必要があるものを変更するにはどうすればよいですか?
今、次のステートメントを実行すると
Truncate Table Product
Declare @Products ProductTable
Insert @Products Values ('Playstation', 'Game Console', 300)
exec usp_Product_InsertUpdate_WithOutput @Products
テーブルに以前のレコードがないストアド プロシージャを使用すると、
ProductID ProductName ProductDesc ProductCost
1 Playstation Game Console 300
しかし、複数のレコードを実行すると
Truncate Table Product
Declare @Products ProductTable
Insert @Products Values
('Playstation', 'Game Console', 300),
('Xbox', 'Game Console', 200),
('Wii', 'Game Console', 150)
exec usp_Product_InsertUpdate_WithOutput @Products
私は得る
ProductID ProductDesc ProductDesc ProductCost
1 Playstation Game Console 300
1 Xbox Game Console 200
1 Wii Game Console 150
私が見たいのは
ProductID ProductDesc ProductDesc ProductCost
1 Playstation Game Console 300
2 Xbox Game Console 200
3 Wii Game Console 150
IDを使用せずにこれを効率的に達成するにはどうすればよいですか?