2011-11-14 72 views
0

我在SQL Server 2008中得到了SQL數據庫生成如下:SQL Server 2008中 - 刪除行與FK約束

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(在相關行其他表)。我在一次事務中嘗試了INNER JOIN的所有組合,但FK_Client_Company約束仍然存在問題。誰能幫我?

還有一件事 - 我不能添加任何東西/修改數據庫結構/約束。它必須是查詢基礎解決方案。

+1

請參閱:http://stackoverflow.com/questions/6260688/sql-server-cascade-delete – Eddy

+2

你有**非常奇怪的**外鍵約束名稱..... –

回答

0

先刪除這些公司的客戶

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

之後,你應該能夠在運營商表運行delete語句

delete company where id > 140000 

我‘相當’肯定就是答案你我正在尋找,但我不是100%肯定的,因爲你的命名方案似乎有點奇怪。我假設company.fk_client_company = client.id。

+0

你說它必須是一個'基於查詢'的解決方案。我假設你意識到你可以用查詢修改數據庫模式,並且你只是說你沒有權限訪問數據庫。如果您實際上有權這樣做,那麼我會建議在公司表中添加一個「有效」字段,並將這些公司標記爲不活動。這可能不是一個可行的解決方案,因爲也許你正在使用不能更改的應用程序來過濾新的「活動」字段,但我只是想把它扔到那裏。 –

+0

非常感謝!我把所有這些代碼放在BEGIN TRAN和COMMIT TRAN –

+0

哦,我剛剛意識到我忘記了一些東西。 「(選擇fk_client_company其中id> 140000)」應該是「(從公司id選擇fk_client_company> 140000)」。我會在答案中解決它。 –