Sql server 自动插入100列过程外键错误SQL

Sql server 自动插入100列过程外键错误SQL,sql-server,stored-procedures,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

我做了一个在表中添加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] 
在执行程序后,我有:

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个产品,而不出现存储表中的错误和复杂性?谢谢。

您的存储表只有4行,id\u存储值介于1和4之间。您正在从0循环到100,并尝试将@s插入产品表的id\u存储列(该列在storage.id\u存储上有一个外键)。存储器中既不存在0也不存在数字5-100。因此出现错误。

在INSERT语句中,您将
id\u存储设置为
@s+1

INSERT INTO Product(description, id_storage,name) 
VALUES (CONCAT('Electronics',CONVERT(nvarchar,@i))
, @s+1,
...
根据错误,问题来自
存储
中的
id\u存储

  • 在存储表中,只有4行的
    id\u存储从1到4
  • 在你的循环中,@s从0到99
当@id不等于1、2、3或4(存储中的值)时,Storage.id_存储和Product.id_存储之间的外键不会验证此值。 该行未插入,您将看到此错误消息

根据您的循环,您在@s=0或@s介于5和99之间时会看到此错误


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

INSERT INTO Product(description, id_storage,name) 
VALUES (CONCAT('Electronics',CONVERT(nvarchar,@i))
, @s+1,
...