私はSQL Serverにデータベースを持っています。そこには顧客用のテーブルが1つあります。各顧客は複数の予約を行うことができますが、予約は1人の顧客にしか属しません。ポイントは、私はAPIを書いてからWPFを使ってクライアントサイドのアプリを書いたのですが、その顧客との関連する予約を実際に削除することなく、顧客を削除できないことに気がつきました。私のT-SQLは、おおよそ次のようになります。私は予約を既存たお客様を削除することはできません言ったようCASCADE DELETEを使用しない行の削除?
CREATE PROCEDURE DeleteCustomer
@Id int
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM [dbo].[Customer]
WHERE Id = @Id
END
GO
しかし:次に
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customer](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FullName] [nvarchar](50) NOT NULL,
[DateOfBirth] [date] NOT NULL,
[Phone] [nvarchar](20) NOT NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
))
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Booking](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Amount] [decimal](10,2) NOT NULL,
[CustomerId] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
))
ALTER TABLE [dbo].Booking WITH CHECK ADD CONSTRAINT [FK_Booking_Customer] FOREIGN KEY([CustomerId])
REFERENCES [dbo].[Customer] ([Id])
GO
ALTER TABLE [dbo].[Booking] CHECK CONSTRAINT [FK_Booking_Customer]
GO
、私はこのように定義され、削除のストアドプロシージャを持っています。 1つの方法は確実にCASCADE DELETEを使用することですが、顧客が削除された場合でも予約を削除したくありません。どのようにして問題や回避策を克服するか?
外部キーを削除するか、カスタムフラグを使用して顧客を削除します(これにより、必要に応じて削除を取り消すこともできます)。 – Marvin
@Marvin何とか外部キーを取り除いて、削除してから外部キーを返すことは可能ですか? – typos