idProduct = id (1 対 1) で結合する次のテーブルがあります。
製品
- idProduct
- 説明
プロダクトキー
- ID
- プロダクトキー
製品の説明に基づいて製品の ProductKeys のキーを更新する、単一および一括の挿入と更新のために、Products テーブルにトリガーを作成する必要があります。
製品にキーがある場合は、キーを説明に更新し、そうでない場合は新しいキーを挿入します。
プロダクト キーは、製品ごとに一意である必要があります。
そのため、別の製品のキーが既に存在する場合は、説明に idProduct を追加してキーを作成します。
私の問題:
同じ説明で2つの異なる製品が挿入または更新されるシナリオを除いて、挿入と更新に対してトリガーが機能しています。このシナリオでは、生成されるキーは両方の製品で同じです。
何か案は?
MERGE ステートメントを使用したトリガーは次のとおりです。
CREATE TRIGGER [dbo].[UpdateKey]
ON [dbo].[Products]
AFTER INSERT, UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
MERGE ProductKeys [Target]
USING
(
SELECT
CASE
WHEN pk.id IS NULL
THEN i.description
ELSE
i.description + '_' + CAST(i.idProduct AS VARCHAR)
END [NewProductKey]
, i.idProduct
FROM
INSERTED i
LEFT OUTER JOIN ProductKeys pk ON pk.id <> i.idProduct AND pk.ProductKey = i.description
) [source]
ON (target.id = source.idproduct)
WHEN NOT MATCHED THEN
INSERT
(
id
, ProductKey
)
VALUES
(
source.idProduct
, source.NewProductKey
)
WHEN MATCHED THEN
UPDATE SET
ProductKey = source.NewProductKey;