我有以下表格加入 idProduct = id (一对一):
产品
- idProduct
- 描述
产品密钥
- ID
- 产品密钥
我需要在 Products 表上为单个和批量插入和更新创建触发器,该触发器根据产品描述更新产品的 ProductKeys 中的键。
如果产品有密钥,则将密钥更新为描述,否则插入新密钥。
每个产品的产品密钥必须是唯一的。
因此,如果其他产品的密钥已存在,请将 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;