我在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