あなたが見ることができるように、私はこのテーブル外部キー列にNULL値を設定していますか?
CREATE TABLE [dbo].[CityMaster](
[CityID] [int] NOT NULL,
[City] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[BranchId] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF__CityM__Branc__74444068] DEFAULT ((0)),
[ExternalBranchId] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_CityMaster] PRIMARY KEY CLUSTERED
(
[City] ASC,
[BranchId] ASC
),
CONSTRAINT [uk_citymaster_cityid_branchid] UNIQUE NONCLUSTERED
(
[CityID] ASC,
[BranchId] ASC
)
)
と別のテーブル
CREATE TABLE [dbo].[CustomerMaster](
[ID] [int] NOT NULL,
[CustomerCode] [varchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[CustomerName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[CustomerAddress] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[CustomerPhone] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[CustomerEmailId] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[CustomerPriority] [int] NOT NULL CONSTRAINT [DF_CustomerMaster_CustomerPriority] DEFAULT ((0)),
[CustomerRegisterDate] [datetime] NULL,
[CustomerIsActive] [bit] NULL CONSTRAINT [DF_CustomerMaster_CustomerIsActive] DEFAULT ((1)),
[BranchId] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF__CustomerM__Branc__67DE6983] DEFAULT ((0)),
[CityId] [int] NULL CONSTRAINT [DF_CustomerMaster_CityId] DEFAULT ((0)),
CONSTRAINT [PK_CustomerMaster] PRIMARY KEY CLUSTERED
(
[CustomerCode] ASC,
[BranchId] ASC
)
) ON [PRIMARY]
ALTER TABLE [dbo].[CustomerMaster] WITH CHECK ADD CONSTRAINT [fk_cdCityId_CityId] FOREIGN KEY([CityId], [BranchId])
REFERENCES [dbo].[CityMaster] ([CityID], [BranchId])
ALTER TABLE [dbo].[CustomerMaster] CHECK CONSTRAINT [fk_cdCityId_CityId]
を持って、CityId, BranchId
の外部キーがあります。私が抱えている問題は、ユーザが彼の都市に入場しないと(このフィールドは必須ではなく、このフィールドは必須ではなく、CityId
は空白になります)、この値をCustomerMaster
テーブルに挿入しようとすると、 FOREIGN KEY制約 "fk_cdCityId_CityId" と競合
INSERT文が。競合が "TestDatabase"、テーブル "dbo.CityMaster" データベースで発生した。 の文が終了したと述べた。
ので、エラー、私は、これを回避する方法を知りたいのですが、一意のキー列または主キー列が外部キーとして参照されているかどうかはわかりますが、NULLにすることはできません。on delete set null
?その場合、その行がCityMaster
から削除された場合、null
がCustomerMaster
(すべての参照を意味します)に設定されます。もしそれが可能ならば、私はこの外部キーの値を手動でnull
に設定できますか? それが何とかできないのなら、私が説明した状況を回避する最善の方法は何ですか?
@ damien-the-unbeliever: この 'default(0)'節は削除する必要がありますか? – Razort4x
@ Razort4x - そうだと思います。 –
良い、それは私を助けなかった –