1
我有以下tFather和年擄錶行:SQL:奇怪的行爲,刪除子表上最後一行相關刪除對父親表
IF OBJECT_ID('dbo.tChild', 'U') IS NOT NULL
DROP TABLE dbo.tChild
IF OBJECT_ID('dbo.tFather', 'U') IS NOT NULL
DROP TABLE dbo.tFather
CREATE TABLE [dbo].[tFather](
[ID] [bigint] NOT NULL,
[fld1] [varchar](50) NULL,
CONSTRAINT [PK_tFather] PRIMARY KEY CLUSTERED
(
[ID] 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].[tChild](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[tFather_ID] [bigint] NULL,
[fld1] [nvarchar](50) NULL,
CONSTRAINT [PK_tChild] PRIMARY KEY CLUSTERED
(
[ID] 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
ALTER TABLE [dbo].[tChild] WITH CHECK ADD CONSTRAINT [FK_tChild_tFather] FOREIGN KEY([tFather_ID])
REFERENCES [dbo].[tFather] ([ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[tChild] CHECK CONSTRAINT [FK_tChild_tFather]
GO
INSERT INTO dbo.tFather (ID, fld1) VALUES ('1', 'a')
INSERT INTO dbo.tChild (tFather_ID, fld1) VALUES ('1', 'X')
INSERT INTO dbo.tChild (tFather_ID, fld1) VALUES ('1', 'Y')
INSERT INTO dbo.tChild (tFather_ID, fld1) VALUES ('1', 'Z')
SELECT * FROM dbo.tFather
ID | fld1
---------
1 | a
SELECT * FROM dbo.tChild
ID | tFather_ID | fld1
----------------------
1 | 1 | X
2 | 1 | Y
3 | 1 | Z
越遠越好! 現在,當我從tFather刪除一行,所有行都正常從刪除tChild因爲級聯刪除/更新
問題是,當我從tChild刪除行一切正常,直到我刪除最後一行,然後tFather中的行也被刪除,這很奇怪。
我在同一個數據庫中的許多相關表和它們的行爲正常,(沒有記錄在tFather刪除時記錄年擄被刪除(表名是象徵性的,所以你可以理解的關係型))
讓測試行爲:
DELETE FROM dbo.tChild WHERE ID='3'
SELECT * FROM dbo.tFather
ID | fld1
---------
1 | a
SELECT * FROM dbo.tChild
ID | tFather_ID | fld1
----------------------
1 | 1 | X
2 | 1 | Y
DELETE FROM dbo.tChild WHERE ID='2'
SELECT * FROM dbo.tFather
ID | fld1
---------
1 | a
SELECT * FROM dbo.tChild
ID | tFather_ID | fld1
----------------------
1 | 1 | X
DELETE FROM dbo.tChild WHERE ID='1'
SELECT * FROM dbo.tFather
ID | fld1
---------
<< - HERE IS THE PROBLEM !!! NO ROWS !!!!!
SELECT * FROM dbo.tChild
ID | tFather_ID | fld1
----------------------
什麼可能導致此類行爲?
任何建議將是巨大的
謝謝
在SQL 2008 R2上嘗試了您的代碼,它的行爲完美無缺。來自父表的數據沒有被刪除 – Raj
我猜想你沒有向我們展示過的觸發器。 –
@Damien_The_Unbeliever:這些桌子上沒有觸發器!觸發器是我想到的第一件事。 – armen