Подтвердить что ты не робот

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

Что это:)

4b9b3361

Ответ 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 - Это головная боль, если в столбце имеется огромное количество данных.