我在SQL Server中有一個數據庫,我有一張表給客戶,每個客戶可以有多個預訂,但預訂只能屬於一個客戶。關鍵是我已經編寫了一個API,然後使用WPF編寫了一個客戶端應用程序,但是我只注意到,如果沒有實際刪除與該客戶相關的預訂,我無法刪除一個客戶。我的T-SQL看起來像這樣大致是:刪除沒有CASCADE DELETE的行?
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
然後,我有這樣的定義刪除存儲過程:
CREATE PROCEDURE DeleteCustomer
@Id int
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM [dbo].[Customer]
WHERE Id = @Id
END
GO
但正如我所說,我不能刪除已存在的預訂客戶。一種方法肯定是使用CASCADE DELETE,但如果客戶被刪除,我不希望刪除預訂。任何想法如何克服這個問題或任何解決方法?
擺脫外鍵或通過一些自定義標記刪除客戶(這也可以讓您在需要時取消刪除)。 – Marvin
@Marvin是否有可能以某種方式擺脫外鍵,做刪除,然後返回外鍵? – typos