自动插入100列程序外键错误SQL

时间:2015-11-25 13:19:04

标签: sql-server stored-procedures

我制作了一个在表格中添加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个产品而不会出现错误和存储表并发症?谢谢。

2 个答案:

答案 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

  • 在您的存储表格中,您只有4行,{1}}从1到4。
  • 在你循环中,@ s从0到99。

当@id不等于1,2,3或4(来自存储的值)时,storage.id_storage和Product.id_storage之间的外键不会验证此值。 未插入该行,您会看到此错误消息。

根据你的循环,你看到@ s = 0或@s在5到99之间的这个错误。

它与您的错误无关,但此查询不会“添加100列”。它只需插入100行。