Как удалить столбец с зависимостями объектов в SQL Server 2008?
Сообщение об ошибке, которое я получаю при попытке удалить столбец:
Объект 'defEmptyString' зависит от столбца 'fkKeywordRolleKontakt'.
Msg 5074, уровень 16, состояние 1, строка 43
ALTER TABLE DROP COLUMN fkKeywordRolleKontakt не удалось, так как один или несколько объектов обращаются к этому столбцу.
Я уже пытался найти ограничения по умолчанию, как описано здесь:
столбец SQL Server 2005 с ограничениями
К сожалению, без каких-либо успехов:( Возвращенная строка:
fkKeywordRolleKontakt 2 814625945 0 defEmptyString
И я не могу удалить ни один из fkKeywordRolleKontakt
и defEmptyString
.
Каков правильный способ избавиться от этой зависимости?
EDIT: Возможно, это тоже важно. Столбец fkKeywordRolleKontakt имеет тип udKeyword (nvarchar (50)) со значением по умолчанию dbo.defEmptyString
.
Изменить 2: Решено
Я мог бы решить проблему сейчас. Извините, я не скопировал полное сообщение об ошибке, которое было:
Msg 5074, Level 16, State 1, Line 1
The object 'defEmptyString' is dependent on column 'fkKeywordRolleKontakt'.
Msg 5074, Level 16, State 1, Line 1
The object 'FK_tlkpRolleKontakt_tlkpKeyword' is dependent on column 'fkKeywordRolleKontakt'.
Msg 4922, Level 16, State 9, Line 1
ALTER TABLE DROP COLUMN fkKeywordRolleKontakt failed because one or more objects access this column.
Я мог бы сгенерировать script, чтобы удалить столбец, щелкнув правой кнопкой мыши на записи столбца (dbo.tlkpRolleKontakt > Columns > fkKeywordRolleKontakt) (в диспетчере серверов MSSQL), выбрав "Изменить и удалить столбец". Затем Table Designer > Generate Change script сгенерировал необходимые команды:
ALTER TABLE dbo.tlkpRolleKontakt
DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt'
ALTER TABLE dbo.tlkpRolleKontakt
DROP COLUMN fkKeywordRolleKontakt
Что это:)
Ответы
Ответ 1
Я мог бы решить проблему сейчас. Извините, я не скопировал полное сообщение об ошибке, которое было:
Msg 5074, уровень 16, состояние 1, строка 1
Объект "defEmptyString" зависит от столбца "fkKeywordRolleKontakt".
Msg 5074, уровень 16, состояние 1, строка 1
Объект 'FK_tlkpRolleKontakt_tlkpKeyword' зависит от столбца 'fkKeywordRolleKontakt'.
Msg 4922, уровень 16, состояние 9, строка 1 ALTER TABLE DROP COLUMN fkKeywordRolleKontakt не удалось, поскольку один или больше объектов обращается к этому столбцу.
Я мог бы сгенерировать script, чтобы удалить столбец, щелкнув правой кнопкой мыши на записи столбца (dbo.tlkpRolleKontakt > Columns > fkKeywordRolleKontakt) (в диспетчере серверов MSSQL), выбрав "Изменить и удалить столбец". Затем Table Designer > Generate Change script сгенерировал необходимые команды:
ALTER TABLE dbo.tlkpRolleKontakt
DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt'
ALTER TABLE dbo.tlkpRolleKontakt
DROP COLUMN fkKeywordRolleKontakt
Ответ 2
Пробовал ли вы сначала:
ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;
?
Ответ 3
удалить ограничение, которое зависит от этого столбца с
ALTER TABLE TableName DROP CONSTRAINT dependent_constraint
Столбец Drop Drop:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME
depend_constraint: это ограничение отображается в ошибке при попытке удалить зависимый столбец.
Пример: попытка удалить столбец IsDeleted2
Ошибка
Объект 'DF__Employees__IsDel__15502E78' зависит от столбца 'IsDeleted2'.
ALTER TABLE DROP COLUMN IsDeleted2 не удалось, поскольку один или несколько объектов войдите в этот столбец.
Ошибка ясно указывает, что нам нужно удалить DF__Employees__IsDel__15502E78
ограничение
ALTER TABLE Employess
DROP CONSTRAINT DF__Employees__IsDel__15502E78;
Стоп-кадр: ALTER TABLE Employess DROP COLUMN IsDelted2
Ответ 4
используйте этот script, чтобы отменить проверку ограничения:
ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname
Ответ 5
Я столкнулся с более простым решением.
- УДАЛИТЬ данные этого столбца.
- Как только столбец не имеет значения внутри, сделайте -
ALTER TABLE <table_name> DROP COLUMN <column_name>
Таким образом, столбец легко отбрасывается.
P.S - Это головная боль, если в столбце имеется огромное количество данных.