に自動生成/更新IDを割り当てるマージ実行するとき、私は、製品TSQLマージテーブル値パラメーターを使用して、バックパラメータ
CREATE TYPE [dbo].[udttProduct] AS TABLE(
[ProductID] [bigint] NOT NULL,
[ProductDescription] [varchar](500) NOT NULL,
[ProductCode] [varchar](50) NOT NULL)
という名前のテーブルの種類とストアドプロシージャ
CREATE PROCEDURE [dbo].[uspCreateOrUpdateProduct]
@ProductParam udttProduct READONLY,
AS
BEGIN
SET NOCOUNT ON;
MERGE Product AS [Target]
USING @ProductParam AS [Source]
ON
[Target].ProductCode = [Source].ProductCode
WHEN MATCHED THEN
UPDATE
SET
[Target].ProductDescription = [Source].ProductDescription
-- i would like to assign the updated ID back to @ProductParam so i can insert to log
WHEN NOT MATCHED BY TARGET THEN
INSERT
(
ProductDescription
, ProductCode
)
VALUES
(
[Source].[ProductDescription]
, [Source].[ProductCode]
);
-- i would like to assign the auto generated ID back to @ProductParam so i can insert to log
-- after insert/update, insert to log
INSERT INTO [dbo].[ProductLog]
(
ProductId, -- so i can insert id to here
ProductDescription,
ProductCode
)
SELECT
ProductID,
ProductDescription,
ProductCode
FROM
@ProductParam
SET NOCOUNT OFF;
END
GO
をしました、私は@ProductParamに更新された/新しいIDを取得したいので、ProductIDを使ってログに記録することができます。
私は他のストアドプロシージャを使用してマージを使用しており、IDを取得してログに挿入するのと同じことをしたいが、これらのストアドプロシージャは大量のデータを必要とし、トランザクションは10000+レコードに対して1秒のようです。
私は一時テーブルを使ってIDを取得しますが、私はマージがこれを行うことができるかどうか疑問に思っています。 これが良い方法でない場合は、私に助言してください。ありがとう。
PS:私のproductIDキーは、挿入中に自動的に生成されます。
[T-SQL - 親テーブルと子テーブルへのデータの挿入]の可能な複製(http://stackoverflow.com/questions/38213008/t-sql-insert-data-into-parent-and-child-tables) –