Как удалить столбец с зависимостями объектов в 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
.
Edit 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.
я мог бы создать скрипт для удаления столбца, щелкнув правой кнопкой мыши на записи столбца (dbo.tlkpRolleKontakt > столбцы > fkKeywordRolleKontakt) (в MSSQL Server Manager), выбрав изменить и удалить столбец. Затем конструктор таблиц > сгенерировать сценарий изменения сгенерировал необходимые команды:
ALTER TABLE dbo.tlkpRolleKontakt
DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt'
ALTER TABLE dbo.tlkpRolleKontakt
DROP COLUMN fkKeywordRolleKontakt
вот именно :)
5 ответов
удалить ограничение который зависит от этого столбца с
ALTER TABLE TableName DROP CONSTRAINT dependent_constraint
Затем Столбец:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME
dependent_constraint : это ограничение отображается в ошибке при попытке удалить зависимый столбец.
пример: попытка удалить какой-то столбец IsDeleted2
объект 'ДФ__сотрудников__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
Я мог бы сейчас решить проблему. Извините, я не скопировал полное сообщение об ошибке, которое было:
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 не удалось, потому что один или несколько объектов обращаются к данному столбцу.
Я мог бы создать скрипт для удаления столбца, щелкнув правой кнопкой мыши на записи столбца (dbo.tlkpRolleKontakt > столбцы > fkKeywordRolleKontakt) (в MSSQL Server Manager), выбрав изменить и удалить столбец. Затем конструктор таблиц > сгенерировать сценарий изменения сгенерировал необходимые команды:
ALTER TABLE dbo.tlkpRolleKontakt
DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt'
ALTER TABLE dbo.tlkpRolleKontakt
DROP COLUMN fkKeywordRolleKontakt
используйте этот скрипт для отмены проверки ограничения:
ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname
я столкнулся с более простым решением.
- удалить данные этого столбца.
- как только столбец не имеет значения внутри него, сделайте -
ALTER TABLE <table_name> DROP COLUMN <column_name>
таким образом, столбец легко отбрасывается.
P. S-это головная боль, если у вас есть экстремальные объемы данных в столбце.