SQL Server 2008 - удаление строк с ограничениями FK - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть база данных SQL в SQL Server 2008, сгенерированная следующим образом:

CREATE TABLE Client ( 
    ID bigint,
    Code varchar(50),
    ClientID int NOT NULL
);
ALTER TABLE Client 
  ADD CONSTRAINT PK_Client PRIMARY KEY CLUSTERED (ClientID);

CREATE TABLE Company ( 
    ID bigint,
    Description nvarchar(100),
    SubsidiaryOf bigint,
    companyID int NOT NULL,
    FK_Client_Company int,
    PK_Company int
);
ALTER TABLE Company 
  ADD CONSTRAINT PK_Company PRIMARY KEY CLUSTERED (companyID);

ALTER TABLE Company 
  ADD CONSTRAINT (ID = ID) FOREIGN KEY (FK_Client_Company) 
      REFERENCES Client (ClientID);

ALTER TABLE Company 
  ADD CONSTRAINT (SubsidiaryOf = ID) FOREIGN KEY (PK_Company) 
      REFERENCES Company (companyID);

CREATE TABLE ContactData ( 
    ID bigint,
    LocationID bigint,
    Contact nvarchar(50),
    contactDataID int NOT NULL,
    PK_Location int
);
ALTER TABLE ContactData 
  ADD CONSTRAINT PK_ContactData PRIMARY KEY CLUSTERED (contactDataID);

ALTER TABLE ContactData 
  ADD CONSTRAINT (LocationID = ID) FOREIGN KEY (PK_Location) 
      REFERENCES Location (locationID);


CREATE TABLE Location ( 
    ID bigint,
    CompanyID bigint,
    Country nvarchar(50),
    ZIPCode nvarchar(50),
    locationID int NOT NULL,
    PK_Company int
);
ALTER TABLE Location 
   ADD CONSTRAINT PK_Location PRIMARY KEY CLUSTERED (locationID);

ALTER TABLE Location 
   ADD CONSTRAINT (CompanyID = ID) FOREIGN KEY (PK_Company) 
       REFERENCES Company (companyID);

И хотел бы удалить все Компании с ID> 140000 (со связанными строками в других таблицах). Я попробовал какую-то комбинацию ВНУТРЕННИХ СОЕДИНЕНИЙ все вместе в одной транзакции, но проблема с ограничением FK_Client_Company по-прежнему существует. Кто-нибудь может мне помочь?

Еще одна вещь - я не могу ничего добавить / изменить структуру / ограничения БД. Это должно быть решение на основе запроса.

1 Ответ

0 голосов
/ 15 ноября 2011

Сначала удалите клиентов этих компаний

    delete client where id in (select fk_client_company from company where id > 140000)

После этого вы сможете запустить оператор удаления для таблицы компании

    delete company where id > 140000

Я «довольно» уверен, что это ответ, который вы ищете, но я не уверен на 100% только потому, что ваша схема именования кажется немного странной. Я делаю предположение, что company.fk_client_company = client.id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...