列をドロップしようとしたときに表示されるエラーメッセージ:
オブジェクト「defEmptyString」は列「fkKeywordRolleKontakt」に依存しています。
メッセージ5074、レベル16、状態1、行43
1つ以上のオブジェクトがこの列にアクセスするため、ALTER TABLE DROP COLUMN fkKeywordRolleKontaktは失敗しました。
ここで説明するように、既にデフォルトの制約を見つけようとしました: SQL Server 2005 drop column with constraint
残念ながら、成功しませんでした:(返される行は:
fkKeywordRolleKontakt 2 814625945 0 defEmptyString
fkKeywordRolleKontakt
とdefEmptyString
のどちらも削除できません。
この依存関係を取り除く正しい方法は何ですか?
編集:おそらくこれも重要です。列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.
列エントリを右クリックして(dbo.tlkpRolleKontakt> Columns> 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
それでおしまい :)
これで問題を解決できました。すみません、完全なエラーメッセージをコピーしませんでした。
メッセージ5074、レベル16、状態1、行1
オブジェクト「defEmptyString」は、列「fkKeywordRolleKontakt」に依存しています。
メッセージ5074、レベル16、状態1、行1
オブジェクト「FK_tlkpRolleKontakt_tlkpKeyword」は列「fkKeywordRolleKontakt」に依存しています。
メッセージ4922、レベル16、状態9、行1 ALTER TABLE DROP COLUMN fkKeywordRolleKontaktは、1つ以上のオブジェクトがこの列にアクセスするために失敗しました。
列エントリを右クリックして(dbo.tlkpRolleKontakt> Columns> 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> DROP CONSTRAINT defEmptyString;
?
制約を削除するこれはその列に依存します
ALTER TABLE TableName DROP CONSTRAINT dependent_constraint
その後、列をドロップ:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME
dependent_constraint:依存列を削除しようとすると、この制約がエラーに表示されます。
例:いくつかの列を削除しようとするIsDeleted2
エラー
オブジェクト「DF__Employees__IsDel__15502E78」は列「IsDeleted2」に依存しています。
1つ以上のオブジェクトがこの列にアクセスするため、ALTER TABLE DROP COLUMN IsDeleted2は失敗しました。
エラーには、DF__Employees__IsDel__15502E78
制約
ALTER TABLE Employess
DROP CONSTRAINT DF__Employees__IsDel__15502E78;
列のドロップ:ALTER TABLE Employess DROP COLUMN IsDelted2
このスクリプトを使用して、制約のチェックをキャンセルします。
ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname
もっと簡単な解決策に出くわしました。
ALTER TABLE <table_name> DROP COLUMN <column_name>
これにより、列が簡単に削除されます。
追伸-列に大量のデータがある場合、これは頭痛の種です。