2014-12-09 2 views
0

MS SQL ServerСтолбцы таблицы A ссылаются на FK таблицы B. Не удается отказаться от таблицы A PK

Я делаю звездную схему. Я установил PK's и FK для моих таблиц, и теперь я пытаюсь написать процедуру, которая выведет ограничения, обрезает таблицы, снова добавит ограничения и затем повторно запишет таблицы. Когда я пытаюсь отказаться от ограничений, я получаю ошибку:

«Ограничение PK_TIMEDIM в настоящее время ссылается таблицей SalesFactTable, ограничение внешнего ключа FK_SALESFACTTABLE Не удалось удалить ограничение.»

EDIT: Одна проблема решена. Другой найден. Я получаю ту же ошибку, кроме как сейчас есть таинственные, автогенерируемые FK's, такие как FK__SalesFact__CUST___19DFD96B.

Пожалуйста, покажите мне, что я делаю неправильно.

ALTER PROCEDURE [dbo].[A11] 
AS 
BEGIN 

--Drop constraints 
ALTER TABLE SalesFactTable 
DROP CONSTRAINT FK_SALESFACTTABLE 

ALTER TABLE SalesFactTable 
DROP CONSTRAINT PK_SALESFACTTABLE 

ALTER TABLE TimeDim 
DROP CONSTRAINT PK_TIMEDIM 

ALTER TABLE CustomerDim 
DROP CONSTRAINT PK_CUSTOMERDIM 

ALTER TABLE PartDim 
DROP CONSTRAINT PK_PARTDIM 

--Truncate tables 
TRUNCATE TABLE TimeDim 
TRUNCATE TABLE CustomerDim 
TRUNCATE TABLE PartDim 
TRUNCATE TABLE SalesFactTable 

--Add constraints 
ALTER TABLE TimeDim 
ADD CONSTRAINT PK_TIMEDIM PRIMARY KEY (TIME_ID) 

ALTER TABLE CustomerDim 
ADD CONSTRAINT PK_CUSTOMERDIM PRIMARY KEY (CUST_ID) 

ALTER TABLE PartDim 
ADD CONSTRAINT PK_PARTDIM PRIMARY KEY (PART_ID) 

ALTER TABLE SalesFactTable 
ADD CONSTRAINT FK_SALESFACTTABLE FOREIGN KEY (TIME_ID) REFERENCES TimeDim (TIME_ID), 
FOREIGN KEY (CUST_ID) REFERENCES CustomerDim (CUST_ID), 
FOREIGN KEY (PART_ID) REFERENCES PartDim (PART_ID) 

ALTER TABLE SalesFactTable 
ADD CONSTRAINT PK_SALESFACTTABLE PRIMARY KEY (TIME_ID, CUST_ID, PART_ID) 
+0

Ну, ПК, вероятно, является первичным ключом, и есть ограничения внешних ключей, ссылающихся его. Вам нужно будет изменить порядок, чтобы сначала скрыть ограничения внешнего ключа? – StuartLC

+1

Это сработало. Спасибо! Я постараюсь вспомнить, что порядок важен в будущем. – Chiharu

ответ

1

** Внешние ключи ссылается на первичный ключ, так что вы не можете удалить первичный ключ перед удалением внешнего ключа. , поэтому сначала необходимо удалить внешний ключ, чтобы удалить ограничение основного ключа из таблицы.

**

ALTER PROCEDURE [dbo].[A11] 
AS 
BEGIN 
    --Drop FK constraints 
ALTER TABLE SalesFactTable 
DROP CONSTRAINT FK_SALESFACTTABLE 
    --Drop PK constraints 
ALTER TABLE SalesFactTable 
DROP CONSTRAINT PK_SALESFACTTABLE 

ALTER TABLE TimeDim 
DROP CONSTRAINT PK_TIMEDIM 

ALTER TABLE CustomerDim 
DROP CONSTRAINT PK_CUSTOMERDIM 

ALTER TABLE PartDim 
DROP CONSTRAINT PK_PARTDIM 

--Truncate tables 
TRUNCATE TABLE TimeDim 
TRUNCATE TABLE CustomerDim 
TRUNCATE TABLE PartDim 
TRUNCATE TABLE SalesFactTable 

--Add constraints 
ALTER TABLE TimeDim 
ADD CONSTRAINT PK_TIMEDIM PRIMARY KEY (TIME_ID) 

ALTER TABLE CustomerDim 
ADD CONSTRAINT PK_CUSTOMERDIM PRIMARY KEY (CUST_ID) 

ALTER TABLE PartDim 
ADD CONSTRAINT PK_PARTDIM PRIMARY KEY (PART_ID) 

ALTER TABLE SalesFactTable 
ADD CONSTRAINT FK_SALESFACTTABLE FOREIGN KEY (TIME_ID) REFERENCES TimeDim (TIME_ID), 
FOREIGN KEY (CUST_ID) REFERENCES CustomerDim (CUST_ID), 
FOREIGN KEY (PART_ID) REFERENCES PartDim (PART_ID) 

ALTER TABLE SalesFactTable 
ADD CONSTRAINT PK_SALESFACTTABLE PRIMARY KEY (TIME_ID, CUST_ID, PART_ID)  
+0

Спасибо за ваш ответ! Я смог успешно удалить созданные мной ограничения, но теперь я получаю ту же ошибку, кроме как с таинственным, автогенерированным (?) 'FK's', таким как' FK__SalesFact__CUST ___ 19DFD96B'. – Chiharu

+0

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

+0

Отладчик не удалось запустить, потому что мне отказано в разрешении на выполнение. :( – Chiharu

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