我制作了一个在表格中添加100列的程序,但我真的无法处理这种情况。 程序是:
GO
CREATE PROCEDURE [add_100*Product] AS
DECLARE @i int, @s int,@start DATETIME, @end DATETIME
SET @start=GETDATE()
SET @i=0
SET @s=0
WHILE @i<100
BEGIN
INSERT INTO Product(description, id_storage,name) VALUES (CONCAT('Electronics',CONVERT(nvarchar,@i)),@s+1,
CONCAT('Laptop',CONVERT(nvarchar,@i)))
SET @i = @i + 1
SET @s = @s +1
END
SET @end = GETDATE()
GO
EXEC [add_100*Product]
首先,我的产品表只有4列:
id_product Description id_storage valability name
1 Food 1 2016-10-10 Orange
2 Electronics 1 2016-12-08 Laptop
3 Jewelry 2 2017-04-03 Ring
4 Food 3 2016-07-05 Pizza
执行程序后我有:
1 Food 1 2016-10-10 Orange
2 Electronics 1 2016-12-08 Laptop
3 Jewelry 2 2017-04-03 Ring
4 Food 3 2016-07-05 Pizza
505 Electronics0 1 NULL Laptop0
506 Electronics1 2 NULL Laptop1
507 Electronics2 3 NULL Laptop2
508 Electronics3 4 NULL Laptop3
执行程序时出现了一些错误,它说:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Product_Storage". The conflict occurred in database "OnlineShop", table "dbo.Storage", column 'id_storage'.
我的表存储看起来:
id_storage storage_name
1 Kentucky
2 Lord
3 Renois
4 Kentucky
问题是什么?如何在产品表中自动插入100个产品而不会出现错误和存储表并发症?谢谢。
答案 0 :(得分:0)
您的存储表只有4行,其id_storage值介于1和4之间。您正在从0到100循环并尝试将@s插入到Product表的id_storage列(其中包含外键) .id_storage)。存储中不存在0和数字5-100。因此错误。
答案 1 :(得分:0)
在您的INSERT语句中,您将id_storage
设置为@s+1
:
INSERT INTO Product(description, id_storage,name)
VALUES (CONCAT('Electronics',CONVERT(nvarchar,@i))
, @s+1,
...
根据错误,问题来自id_storage
中的Storage
:
当@id不等于1,2,3或4(来自存储的值)时,storage.id_storage和Product.id_storage之间的外键不会验证此值。 未插入该行,您会看到此错误消息。
根据你的循环,你看到@ s = 0或@s在5到99之间的这个错误。
它与您的错误无关,但此查询不会“添加100列”。它只需插入100行。