2010-02-12 2 views
24

Сообщение об ошибке я получить при попытке удалить столбец:Как удалить столбец с зависимостями объектов в SQL Server 2008?

Объект «defEmptyString» зависит от столбца «fkKeywordRolleKontakt».

Msg 5074, Level 16, State 1, Line 43

ALTER TABLE DROP COLUMN fkKeywordRolleKontakt не удалось, так как один или несколько объектов, доступ к этой колонке.

Я уже пытался найти ограничения по умолчанию, как описано здесь: SQL Server 2005 drop column with constraints

К сожалению, без какого-либо успеха :(Линия Возвращается:

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), выбрав «Изменить и удалить столбец». Тогда конструктор таблиц> 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 

Вот это :)

+0

Спасибо, вы должны добавить свое Редактировать как ответ и принять его. – Sprockincat

+0

@Sprockincat Done. –

ответ

3

я мог бы решить эту проблему сейчас. Мне очень жаль, что я не копировать полное сообщение об ошибке, которое было:

Msg 5074, Level 16, State 1, Line 1
Объект 'defEmptyString' зависит от столбца 'fkKeywordRolleKontakt'.

Msg 5074, Level 16, State 1, Line 1
Объект 'FK_tlkpRolleKontakt_tlkpKeyword' зависит от столбца 'fkKeywordRolleKontakt'.
Msg 4922, уровень 16, состояние 9, строка 1 ALTER TABLE DROP COLUMN fkKeywordRolleKontakt не удалось, потому что один или еще один объект доступа к этому столбцу.

Я мог бы создать сценарий отказаться столбец, щелкнув правой кнопкой мыши на элементе колонки (dbo.tlkpRolleKontakt> Колонки> fkKeywordRolleKontakt) (в MSSQL Server Manager), выбрав команду Изменить и удалить столбец. Затем 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

спасибо, я не знал, что мы могли бы отменить дефолт (теперь это выглядит очевидно) – Disturb

36

Пробовали ли вы первый:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString; 

?

+2

Да, да. Затем я получил сообщение о том, что defEmptyString не является ограничением для этой таблицы. –

+1

Так что происходит с этим запросом: SELECT OBJECT_NAME (parent_object_id) FROM sys.default_constraints WHERE name = 'defEmptyString'; -? Получаете ли вы результат, если да, то эта таблица? Если вы не получите результат, как насчет: SELECT type_desc FROM sys.objects WHERE name = 'defEmptyString'; -? –

+0

Нет результатов для первого, а для второй строки: type_desc DEFAULT_CONSTRAINT –

2

использовать этот скрипт, чтобы отменить проверку ограничений:

ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname 
+0

Не существует ограничений: Msg 11415, Уровень 16, Состояние 1, Строка 1 Объект 'defEmptyString' не может быть отключен или включен. Это действие применяется только к внешним ключам и ограничениям проверки. Msg 4916, уровень 16, состояние 0, строка 1 Невозможно включить или отключить ограничение. См. Предыдущие ошибки. –

-1

Я побежал в более простое решение.

  1. УДАЛИТЕ данные этой колонки.
  2. После столбца имеет никакого значения внутри нее не делают -

ALTER TABLE <table_name> DROP COLUMN <column_name>

Таким образом, колонна легко отброшен.

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

+0

ahh, а как насчет данных, которые были удалены ... –

+1

Неограниченные внешние ключи не позволят этому –

7

падение ограничение которое зависит от этого столбца с

ALTER TABLE TableName DROP CONSTRAINT dependent_constraint 

Затем Отбросьте Колонка:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME 

dependent_constraint: это ограничение отображается в сообщении об ошибке при попытке для удаления зависимого столбца.

Пример: попытка бросить какой-то столбец IsDeleted2

Error

Объект '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

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