好吧,我有这两张桌子:
CREATE TABLE [dbo].[Card]
(
[CardID] INT IDENTITY (1, 1) NOT NULL,
...
PRIMARY KEY CLUSTERED ([CardID] ASC)
);
CREATE TABLE [dbo].[Deck]
(
[DeckID] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR (50) NOT NULL,
[Class] VARCHAR (25) NOT NULL,
[Guide] VARCHAR (MAX) NOT NULL,
PRIMARY KEY CLUSTERED ([DeckID] ASC)
);
这个想法是有人可以使用Card表中的记录构建自己的套牌。对于这个功能,我写了一个查找表脚本:
CREATE TABLE [dbo].[DeckCard]
(
[DeckID] INT NOT NULL,
[CardID] INT NOT NULL,
[Count] INT NOT NULL,
PRIMARY KEY CLUSTERED ([DeckID] ASC, [CardID] ASC),
FOREIGN KEY ([DeckID]) REFERENCES [dbo].[Deck] ([DeckID]),
FOREIGN KEY ([CardID]) REFERENCES [dbo].[Card] ([CardID])
);
我刚注意到并改变为对SQLException
没有影响的东西是DeckCard
表中的PRIMARY KEY定义(我根据查找表示例定义了这个定义)。但无论如何这是我得到的错误,我根本不理解与关键语句的冲突,因为我有外键的引用主键。任何SQL教程中的任何内容都不会让我相信这不是确切的方法,所以我认为这与VS本身有关吗? (再次删除查找表定义中的PRIMARY KEY行不会改变任何内容)。
我得到的错误是:
System.Data.SqlClient.SqlException:
INSERT语句与FOREIGN KEY约束“FK__DeckCard__DeckID__48CFD27E”冲突。冲突发生在数据库“TheMorningStar”,表“dbo.Deck”,列'DeckID'
答案 0 :(得分:1)
如果要将数据插入[DeckCard]表,首先必须插入[Card]和[Deck]表。
插入[Card]和[Deck]表后,您将获得CardID和DeckID用于插入[DeckCard]表。
因为CardID和DeckID是IDENTITY列,所以你想获得CardID和DeckID,那么你使用SELECT @@ IDENTITY。
例)
DECLARE @CardID INT, @DeckID INT;
INSERT INTO [dbo].[Card]([Name]) VALUES('Name');
SET @CardID = @@IDENTITY;
INSERT INTO [dbo].[Deck]([Name],[Class],[Guide]) VALUES('Name','Class','Guide');
SET @DeckID = @@IDENTITY;
INSERT INTO [dbo].[DeckCard]([CardID],[DeckID],[Count]) VALUES(@CardID,@DeckID,0);
我希望它会对你有所帮助。
答案 1 :(得分:0)
由于某些特定情况,可能会出现此问题
关系表不一致(表示在参考表中插入时可能存在不一致的数据插入)。要解决首先插入Card和Deck表数据,然后必须将主键数据插入DeckCard表。如果您尝试插入第一个Deckard表,则可能是错误或不一致的数据入口不属于其他表抛出错误。
2.从您的错误消息dbo.Deck",列' DeckID未包含或不匹配。 !!!
我认为答案会有所帮助。