sql-server - 如何在另一个表的外键列中添加重复值?
问题描述
一旦我将约束放在另一个表中以设置外键,我就无法在表中插入重复值。
删除引用表中的外键约束(在购买表中),那么如何在引用表和引用表之间建立关系?
可能允许重复值?我不知道该怎么做?
采购表:
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
解决方案
你多虑了。您已指定PurchaseId
身份列和主键,然后在第二个插入语句中明确指定PurchaseId
与1
已在第一个插入语句中插入的主键值冲突的 。
PurchaseId
必须是独一无二的。
推荐阅读
- firebase - 在 Firebase 中是否可以进行单独的身份验证但使用相同的 Cloud Firestore 数据库?
- javascript - 使用时刻的错误日期验证
- javascript - 如何使用 useEffect 钩子实现复杂的 shouldComponentUpdate?
- c# - ExcludeFromCodeCoverage 不适用于 asp.net core 3.1 单元测试项目
- wpf - 如何清除 Xamarin.WPF 中 listviewitem 的奇怪间距?
- python - python如何在excel单元格中粘贴非字母数字字符串
- java - 如何使用 Retrofit2 映射带有 ArrayList 的对象?
- blogger - Blogger 模板中的“super.main”是什么意思
- google-cloud-data-fusion - 在云数据融合中使用 JEXL
- c# - 如何将 2 个 db 调用合并为一个