Как удалить столбец с зависимостями объектов в 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 defEmptyString;

?


удалить ограничение который зависит от этого столбца с

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 

я столкнулся с более простым решением.

  1. удалить данные этого столбца.
  2. как только столбец не имеет значения внутри него, сделайте -

ALTER TABLE <table_name> DROP COLUMN <column_name>

таким образом, столбец легко отбрасывается.

P. S-это головная боль, если у вас есть экстремальные объемы данных в столбце.