Sql server 自动插入100列过程外键错误SQL
我做了一个在表中添加100列的过程,但我真的无法处理这种情况。 程序如下: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
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,
...