2010-02-12 3 views
24

Il messaggio di errore che sto ottenendo quando si cerca di eliminare una colonna:Come si elimina una colonna con dipendenze oggetto in SQL Server 2008?

L'oggetto 'defEmptyString' dipende da colonna 'fkKeywordRolleKontakt'.

Msg 5074, livello 16, stato 1, riga 43

ALTER TABLE DROP COLUMN fkKeywordRolleKontakt riuscita perché uno o più oggetti accedono a questa colonna.

Ho già cercato di trovare i vincoli di default, come descritto qui: SQL Server 2005 drop column with constraints

Purtroppo senza successo :(La linea restituito è:

fkKeywordRolleKontakt 2 814625945 0 defEmptyString 

E non posso rimuovere una delle fkKeywordRolleKontakt e defEmptyString.

Qual è il modo corretto per sbarazzarsi di questa dipendenza?

EDIT: Forse anche questo è importante. La colonna fkKeywordRolleKontakt è di tipo udKeyword (nvarchar (50)) con default dbo.defEmptyString.


Edit 2: Risolto

ho potuto risolvere il problema ora. Mi dispiace, non ho copiato il messaggio di errore completo, che era:

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.

ho potuto generare uno script per eliminare la colonna facendo clic destro sulla voce della colonna (dbo.tlkpRolleKontakt> Colonne> fkKeywordRolleKontakt) (in MSSQL Server Manager), selezionando Modifica ed elimina la colonna. Poi Progettazione tabelle> generare un cambiamento script generato i comandi necessari:

ALTER TABLE dbo.tlkpRolleKontakt 
    DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword 
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt' 
ALTER TABLE dbo.tlkpRolleKontakt 
    DROP COLUMN fkKeywordRolleKontakt 

il gioco è fatto :)

+0

Grazie, è necessario aggiungere la modifica come risposta e accettarlo. – Sprockincat

+0

@Sprockincat Fatto. –

risposta

3

ho potuto risolvere il problema ora. Mi dispiace, non ho copiato il messaggio di errore completo, che era:

Msg 5074, livello 16, stato 1, riga 1
L'oggetto 'defEmptyString' dipende dalla colonna 'fkKeywordRolleKontakt'.

Msg 5074, livello 16, stato 1, riga 1
L'oggetto 'FK_tlkpRolleKontakt_tlkpKeyword' dipende da colonna 'fkKeywordRolleKontakt'.
Messaggio 4922, livello 16, stato 9, riga 1 ALTER TABLE DROP COLUMN fkKeywordRolleKontakt non riuscito perché uno o più oggetti accede a questa colonna.

ho potuto generare uno script per eliminare la colonna facendo clic destro sulla voce della colonna (dbo.tlkpRolleKontakt> Colonne> fkKeywordRolleKontakt) (in MSSQL Server Manager), selezionando Modifica e l'eliminazione della colonna. Quindi Designer tabelle> Genera script di modifica ha generato i comandi necessari:

ALTER TABLE dbo.tlkpRolleKontakt 
    DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword 
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt' 
ALTER TABLE dbo.tlkpRolleKontakt 
    DROP COLUMN fkKeywordRolleKontakt 
+1

grazie, non sapevo che potremmo separare un default (sembra ovvio ora) – Disturb

36

Hai provato prima:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString; 

?

+2

Sì, l'ho fatto. Poi ho ricevuto un messaggio che defEmptyString non è un vincolo su questa tabella. –

+1

Quindi, cosa succede con questa query: SELEZIONA OBJECT_NAME (parent_object_id) FROM sys.default_constraints WHERE name = 'defEmptyString'; -? Hai un risultato, se è così, è questo tavolo? Se non si ottiene un risultato, cosa dire: SELECT type_desc FROM sys.objects WHERE name = 'defEmptyString'; -? –

+0

Nessun risultato per il primo e per la seconda riga: type_desc DEFAULT_CONSTRAINT –

2

uso questo script per annullare il controllo di vincolo:

ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname 
+0

Non sembra essere alcun vincolo: Msg 11415, livello 16, stato 1, riga 1 Oggetto 'defEmptyString' non può essere attivata o disattivata. Questa azione si applica solo alla chiave esterna e controlla i vincoli. messaggio 4916, livello 16, stato 0, riga 1 Impossibile abilitare o disabilitare il vincolo. Vedi errori precedenti. –

-1

mi sono imbattuto in una soluzione più semplice.

  1. CANCELLARE i dati di quella colonna.
  2. Una volta che la colonna non ha alcun valore al suo interno fare -

ALTER TABLE <table_name> DROP COLUMN <column_name>

In questo modo la colonna è facile cadere.

P.S - Questo è un mal di testa se ti piacciono le quantità estreme di dati nella colonna.

+0

ahh, e per quanto riguarda i dati che sono stati cancellati ... –

+1

Le chiavi esterne non annullabili non permetteranno a questo –

7

eliminare il vincolo che dipende quella colonna con

ALTER TABLE TableName DROP CONSTRAINT dependent_constraint 

poi cadere Colonna:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME 

dependent_constraint: questo vincolo è mostrato l'errore quando tentiamo per eliminare la colonna dipendente.

Esempio: cercando di cadere qualche colonna IsDeleted2

errore

L'oggetto 'DF__Employees__IsDel__15502E78' dipende colonna 'IsDeleted2'.

ALTER TABLE DROP COLUMN IsDeleted2 non riuscito perché uno o più oggetti accedere a questa colonna.

Errore afferma chiaramente che abbiamo bisogno di eliminare DF__Employees__IsDel__15502E78 vincolo

ALTER TABLE Employess 
DROP CONSTRAINT DF__Employees__IsDel__15502E78; 

goccia Colonna:ALTER TABLE Employess DROP COLUMN IsDelted2