0

データベースにテーブル継承があります。テーブル" Item"とテーブル" Something"があります。これはItemキーと自動インクリメントです。表には、主キー(自動インクリメントではない)があります。これらのテーブルは1:1の関係にあります。 だから私はそれらのテーブルにデータを挿入しようとしましたが、これは機能しません:ItemIdSomethingItemId

...
DECLARE @itemId int

    INSERT INTO dbo.Items
    (ItemTypeId,UserId,CreatedOnDate,Title,Description)
    VALUES
    (@p_ItemTypeId,@p_UserId,@p_CreatedOnDate,@p_Title,@p_Description)

    SELECT @itemId = SCOPE_IDENTITY()

    INSERT INTO dbo.Something
    (ItemsId)
    VALUES
    (@itemId)
...

これは私が得るエラーです:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Items_Somethings".

テーブルはスクリプトを作成します:

CREATE TABLE [dbo].[Items](
    [ItemdId] [int] IDENTITY(1,1) NOT NULL,
    [ItemTypeId] [int] NULL,
    [UserId] [int] NULL,
    [CreatedOnDate] [smalldatetime] NULL,
    [Title] [nvarchar](50) NULL,
    [Description] [nvarchar](max) NULL,

 CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED 
(
    [ItemId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Items]  WITH CHECK ADD  CONSTRAINT [FK_Items_Somethings] FOREIGN KEY([ItemId])
REFERENCES [dbo].[Somethings] ([ItemId])
GO

ALTER TABLE [dbo].[Items] CHECK CONSTRAINT [FK_Items_Somethings]
GO


CREATE TABLE [dbo].[Somethings](
    [ItemId] [int] NOT NULL,
 CONSTRAINT [PK_Somethings] PRIMARY KEY CLUSTERED 
(
    [ItemId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
4

2 に答える 2

1
ALTER TABLE [dbo].[Items]  WITH CHECK ADD  CONSTRAINT [FK_Items_Somethings] FOREIGN KEY([ItemId])
REFERENCES [dbo].[Somethings] ([ItemId])

外部キーの方向が正しくありません。

[dbo]。[Somethings]に外部キーを追加し、[dbo]。[Items].ItemIdを参照する必要があります。

ALTER TABLE [dbo].[Somethings]  WITH CHECK ADD  CONSTRAINT [FK_Somethings_Items] FOREIGN KEY([ItemId])
REFERENCES [dbo].[Items] ([ItemId])
于 2012-10-07T14:02:35.003 に答える
1

このスクリプトでは、テーブル間の継承を反転しています。Somethingテーブルがテーブルから継承する場合Itemは、次FKのようにテーブル`Something'に作成する必要があります。

ALTER TABLE [dbo].[Somethings]  WITH CHECK ADD  CONSTRAINT [FK_Somethings_Items] FOREIGN KEY([ItemId])
REFERENCES [dbo].[Items] ([ItemId])
GO

ALTER TABLE [dbo].[Somethings] CHECK CONSTRAINT [FK_Somethings_Items]
GO
于 2012-10-07T14:23:32.903 に答える