29

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

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

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

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

ここで説明されているように、私はすでにデフォルトの制約を見つけようとしました: 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 > 列 > 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

それでおしまい :)

4

5 に答える 5

40

最初に試しましたか:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;

?

于 2010-02-12T17:45:31.480 に答える
5

私は今問題を解決することができました。申し訳ありませんが、完全なエラー メッセージをコピーしませんでした。

メッセージ 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 > 列 > 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
于 2016-06-09T10:35:14.640 に答える
2

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

ALTER TABLE  @tablename  NOCHECK CONSTRAINT  @constraintname 
于 2010-02-13T12:54:20.997 に答える
-1

私はより簡単な解決策に出くわしました。

  1. その列のデータを削除します。
  2. 列の内部に値がなくなったら、次のようにします -

ALTER TABLE <table_name> DROP COLUMN <column_name>

このようにして、列は簡単にドロップされます。

PS - 列に極端な量のデータがある場合、これは頭痛の種です。

于 2014-03-25T11:33:17.380 に答える