子テーブルの行を削除したい。エラーが発生します
DELETEステートメントがREFERENCE制約「FK_Address_UserDataSet」と競合していました。データベース「XYZ」、テーブル「dbo.Address」、列「DataSetId」で競合が発生しました。ステートメントは終了されました。
UserDataSet
親と子の テーブルを持つデータベース構造がありAddress
ます(親は任意の数の子を持つことができます)。
子がDataSetId
有効なに関連していることを要求する外部キー制約(エラーで言及)がありますUserDataSet
。
MS SQL Server Management Studio 2008
簡略化された形式で作成されたテーブルスクリプトと制約スクリプトは次のとおりです。
CREATE TABLE [dbo].[Address](
[AddressId] [int] IDENTITY(1,1) NOT NULL,
[DataSetId] [int] NOT NULL,
--other fields
CONSTRAINT [PK_Address] PRIMARY KEY CLUSTERED
(
[AddressId] 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
---
CREATE TABLE [dbo].[UserDataSet](
[DataSetId] [int] IDENTITY(1,1) NOT NULL,
--other fields
CONSTRAINT [PK_UserDataSet] PRIMARY KEY CLUSTERED
(
[DataSetId] 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
---Create the constraint
ALTER TABLE [dbo].[Address] WITH NOCHECK ADD CONSTRAINT [FK_Address_UserDataSet] FOREIGN KEY([DataSetId])
REFERENCES [dbo].[UserDataSet] ([DataSetId])
GO
ALTER TABLE [dbo].[Address] CHECK CONSTRAINT [FK_Address_UserDataSet]
GO
しかし、この設定では、(親ではなく)子を削除することがどのように問題になるのでしょうか。
削除する行が現在無効であり、おそらく制約が(まだ)使用されていないときに追加された可能性があります)、無効な外部キーを持つ子を削除するときに制約が適用されるようになりましたか?