web-dev-qa-db-ja.com

SQL Server 2008でオブジェクトの依存関係を持つ列を削除するにはどうすればよいですか?

列をドロップしようとしたときに表示されるエラーメッセージ:

オブジェクト「defEmptyString」は列「fkKeywordRolleKontakt」に依存しています。

メッセージ5074、レベル16、状態1、行43

1つ以上のオブジェクトがこの列にアクセスするため、ALTER TABLE DROP COLUMN fkKeywordRolleKontaktは失敗しました。

ここで説明するように、既にデフォルトの制約を見つけようとしました: SQL Server 2005 drop column with constraint

残念ながら、成功しませんでした:(返される行は:

fkKeywordRolleKontakt 2 814625945 0 defEmptyString

fkKeywordRolleKontaktdefEmptyStringのどちらも削除できません。

この依存関係を取り除く正しい方法は何ですか?

編集:おそらくこれも重要です。列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

それでおしまい :)

26

これで問題を解決できました。すみません、完全なエラーメッセージをコピーしませんでした。

メッセージ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
3

最初に試しましたか:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;

36
Aaron Bertrand

制約を削除するこれはその列に依存します

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

7
Jinna Balu

このスクリプトを使用して、制約のチェックをキャンセルします。

ALTER TABLE  @tablename  NOCHECK CONSTRAINT  @constraintname 
2
masoud ramezani

もっと簡単な解決策に出くわしました。

  1. その列のデータを削除します。
  2. 列に値が入っていない場合-

ALTER TABLE <table_name> DROP COLUMN <column_name>

これにより、列が簡単に削除されます。

追伸-列に大量のデータがある場合、これは頭痛の種です。

0
Sandman