首页 > 解决方案 > 如何在另一个表的外键列中添加重复值?

问题描述

一旦我将约束放在另一个表中以设置外键,我就无法在表中插入重复值。

  1. 删除引用表中的外键约束(在购买表中),那么如何在引用表和引用表之间建立关系?

  2. 可能允许重复值?我不知道该怎么做?

采购表:

CREATE TABLE purchase 
(
    [PurchaseId] INT NOT NULL IDENTITY PRIMARY KEY,
    [SupplierId] INT NOT NULL REFERENCES supplier(SupplierId),
    [ProductId] INT NOT NULL REFERENCES product (ProductId),
    [NumberReceived] INT NOT NULL,
    [PurchaseDate] DATE NOT NULL,
);

SET IDENTITY_INSERT purchase ON
INSERT INTO purchase ([PurchaseId], [SupplierId], [ProductId], [NumberReceived], [PurchaseDate])
VALUES (1, 2, 2, 50, '2014-11-02'),
       (2, 2, 1, 15, '2014-09-02'),

SET IDENTITY_INSERT purchase OFF

触发器:更改库存值

CREATE TRIGGER TR_Incoming_Stock
ON purchase 
AFTER INSERT 
AS 
BEGIN
    DECLARE @Inserted_Value INT, @ProductId INT, @Updated_value INT

    SELECT @Inserted_Value, @ProductId(SELECT NumberReceived, ProductId 
    FROM inserted)

    UPDATE product 
    SET InventoryOnHand = InventoryOnHand + @Inserted_Value 
    WHERE ProductId = @ProductId
END

我正在尝试将重复值添加到购买表并得到重复外键值的错误。

SET IDENTITY_INSERT purchase ON

INSERT INTO purchase ([PurchaseId], [SupplierId], [ProductId], [NumberReceived], [PurchaseDate])
VALUES (1, 2, 2, 50, '2014-11-02')

SET IDENTITY_INSERT purchase OFF

标签: sql-servertriggersduplicatesforeign-keys

解决方案


你多虑了。您已指定PurchaseId身份列和主键,然后在第二个插入语句中明确指定PurchaseId1已在第一个插入语句中插入的主键值冲突的 。

PurchaseId必须是独一无二的。


推荐阅读