一個奇怪的早晨,我有這個SQL腳本 - 我收到以下錯誤(因爲這個腳本是用來填充表了虛擬數據的腳本):
Msg 547, Level 16, State 0, Line 7
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_ATTR". The conflict occurred in database "PhonebookDuplication", table "dbo.Attributes_Dummy", column 'Id'.
The statement has been terminated.
由於問題表明,這個表中的行仍然被插入(就好像它沒有強制執行外鍵約束)
我還測試了手動插入數據 - 它不會拋出這個錯誤。
這裏是我的表格和我執行的腳本的佈局。我需要知道發生了什麼,以及爲什麼它會拋出一個錯誤:)我敢打賭,我忽略了一些明顯的東西。
腳本:
use PhonebookDuplication;
DROP TABLE Numbers_Attributes_Bridge;
DROP TABLE Numbers_Dummy;
DROP TABLE Attributes_Dummy;
CREATE TABLE Numbers_Dummy
(
Id int IDENTITY(1,1) PRIMARY KEY,
Number VARCHAR(20),
AccountId INT,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
CREATE TABLE Attributes_Dummy
(Id int IDENTITY(1,1) PRIMARY KEY,
AccountId INT,
Attribute VARCHAR(100)
);
CREATE TABLE Numbers_Attributes_Bridge
(
NumberId int,
AttributeId int,
AccountId int,
Value Varchar(100)
CONSTRAINT PK_NA PRIMARY KEY
(
NumberId ASC,
AttributeId ASC
)
CONSTRAINT FK_Numbers FOREIGN KEY (NumberId) REFERENCES Numbers_Dummy(Id),
CONSTRAINT FK_ATTR FOREIGN KEY (AttributeId) REFERENCES Attributes_Dummy(Id),
);
DECLARE @COUNTER INT = 0;
SET NOCOUNT ON
WHILE (@COUNTER < 150)
BEGIN
INSERT INTO Numbers_Dummy VALUES ('082'+CONVERT(varchar(15),@Counter),2000046,'Eon','du Plessis')
SET @COUNTER += 1;
END
SELECT COUNT(*) FROM Numbers_Dummy
SET @COUNTER = 0;
WHILE (@COUNTER < 5)
BEGIN
INSERT INTO Attributes_Dummy VALUES (2000046,'Attribute'+CONVERT(varchar(15),@Counter))
SET @COUNTER += 1;
END
SELECT COUNT(*) FROM Attributes_Dummy
DECLARE @COUNTER2 INT = 0 ;
DECLARE @SUBCOUNTER INT = 0;
WHILE (@COUNTER2 <= 150)
BEGIN
WHILE (@SUBCOUNTER <= 5)
BEGIN
INSERT INTO Numbers_Attributes_Bridge VALUES (@COUNTER2,@SUBCOUNTER,2000046, 'ATTRIBUTE-' + CONVERT(VARCHAR(100),@SUBCOUNTER))
SET @SUBCOUNTER [email protected] + 1;
END
SET @SUBCOUNTER = 0;
SET @COUNTER2 = @COUNTER2 + 1;
END
邏輯上說,該numbers_dummy表將有150行,ID = 1〜150個 屬性將具有5行,ID = 1 - 5 Numbers_Attributes_Bridge應具有750行:NumberID = 1到150與AttributeID = 1到5的複合主鍵值
我得到上述錯誤,但行仍插入。
下面的代碼行手動測試沒有引發錯誤:
INSERT INTO Numbers_Attributes_Bridge VALUES (150,5,2000046, 'ATTRIBUTE-5')
這是怎麼回事?
從1開始計數,而不是0. – Arvo 2013-03-19 08:33:33
請嘗試(15字符填充) – Eon 2013-03-19 08:36:33
相同情況。仍然收到錯誤,但數據仍然會插入 – Eon 2013-03-19 08:37:42