2013-12-02 2 views
0

Microsoft SQL Server 2012 & ASP.NETSQL Server не удаляет ребенка родителя, где родитель также является потомком другого родителя

мне нужна помощь со следующим, что я борюсь с, я есть 3 таблицы в базе данных:

NumberOne > NumberTwo > NumberThree 

NumberOne:

  • идентификатор (целое)

NUMBERTWO:

  • ID (INT)
  • numberone_id

NumberThree

  • идентификатор (целое)
  • numbertwo_id

У меня есть внешний ключ из id (номер один) к numberone_id (номер два) и внешнего ключа от id (номер два) к numbertwo_id (номер три). Эти клавиши имеют Cascade как правило Delete. Теперь, когда я программно удаляю таблицу номер один, также удаляются номер два и номер три. Но когда я программно удаляю таблицу номер два, и я хочу сохранить таблицу один, номер три должен быть удален, но это не так.

Почему это и как я могу это исправить? Заранее спасибо.

EDIT:

В соответствии с просьбой:

CREATE TABLE [dbo].[REACTIONFILES](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [reactions_id] [int] NOT NULL, 
    [reactionsFile] [varbinary](max) NOT NULL, 
    [reactionsName] [varchar](250) NOT NULL, 
CONSTRAINT [PK_REACTIONFILES] 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] TEXTIMAGE_ON [PRIMARY] 


CREATE TABLE [dbo].[REACTIONS](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [tickets_id] [int] NOT NULL, 
    [contents] [varchar](150) NOT NULL, 
    [users_id] [int] NOT NULL, 
    [reactionStartdate] [date] NOT NULL, 
CONSTRAINT [PK_REACTIONS] 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] 


CREATE TABLE [dbo].[TICKETS](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [subject] [varchar](50) NOT NULL, 
    [categories_id] [int] NOT NULL, 
    [priorities_id] [int] NOT NULL, 
    [statuses_id] [int] NOT NULL, 
    [users_id] [int] NOT NULL, 
    [usergroups_id] [int] NOT NULL, 
    [isPublic] [bit] NOT NULL, 
    [devStartdate] [date] NULL, 
    [devEnddate] [date] NULL, 
    [devTime] [varchar](50) NULL, 
    [commentIntern] [varchar](max) NULL, 
    [commentExtern] [varchar](max) NULL, 
    [releaseVersion] [varchar](150) NULL, 
    [ticketStartdate] [date] NOT NULL, 
CONSTRAINT [PK_TICKETS] 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] TEXTIMAGE_ON [PRIMARY] 
+0

Что произойдет, если вы удаляете NUMBERTWO? Покажите свой оператор create для таблицы numberTwo –

+0

Если я удалю numberTwo, numberOne все еще там (как предполагалось), numberTwo удаляется (как предполагается) и numberThree все еще там (должен быть удален). –

+0

Можете ли вы ** показать нам ** код T-SQL для настройки этих таблиц и их отношений FK? –

ответ

2

Я не могу воспроизвести это. Вот сценарий (и причина, по которой я поставил это в ответ, хотя это комментарий).

Можете ли вы создать сценарий, демонстрирующий проблему?

create table one(id int not null primary key) 
go 
insert into one(id) values (1),(2),(3) 
go 
create table two(id int not null primary key, one_id int not null references one(id) on delete cascade) 
go 
insert into two(id,one_id) values (1,1),(2,2),(3,3) 
go 
create table three(id int not null primary key, two_id int not null references two(id) on delete cascade) 
go 
insert into three(id,two_id) values (1,1),(2,2),(3,3) 
go 
delete from one where id = 3 
delete from two where id = 2 
select * from two 
select * from three 
select * from one 

Результаты:

id   one_id 
----------- ----------- 
1   1 

(1 row(s) affected) 

id   two_id 
----------- ----------- 
1   1 

(1 row(s) affected) 

id 
----------- 
1 
2 

(2 row(s) affected) 
+0

+1 правильный - если установлены таблицы и отношения FK up ** правильно **, то это * просто работает как шарм * –

Смежные вопросы