2010-06-22 14 views
34

Se provo ad eseguire di seguito query:Come posso risolvere "O il parametro @objname è ambiguo o il @objtype richiesto (COLUMN) è sbagliato."?

EXEC sp_rename 'ENG_TEst.[ENG_Test_A/C_TYPE]', 'ENG_Test_AC_TYPE', 'COLUMN' 

ottengo un errore:

Either the [email protected] is ambiguous or the claimed @objtype (COLUMN) is wrong.

Come posso risolverlo?

+2

Mostraci la definizione di 'ENG_MYTALLY' – egrunin

+0

Nel mio caso, ho ricevuto questo errore perché il nome della tabella che ho provato ad aggiornare non esisteva. – Samuel

+0

Questo a causa del nome Conflitto di nomi di classe (Modello), quando crea automaticamente le tabelle e ... –

risposta

22

Dadi. Ho fatto lo stesso errore settimane fa, e dopo un sacco di tempo perso ho capito come farlo funzionare - ma da allora l'ho dimenticato. (Non molto d'aiuto, oltre a dire di sì, si può fare.)

Hai provato diverse combinazioni di parentesi, o con e senza parentesi? per esempio.

EXEC sp_rename 'ENG_TEst.ENG_Test_A/C_TYPE', 'ENG_Test_AC_TYPE', 'COLUMN'; 
EXEC sp_rename '[ENG_TEst].[ENG_Test_A/C_TYPE]', 'ENG_Test_AC_TYPE', 'COLUMN'; 
EXEC sp_rename '[ENG_TEst].[ENG_Test_A/C_TYPE]', '[ENG_Test_AC_TYPE]', 'COLUMN'; 
EXEC sp_rename '[ENG_TEst].ENG_Test_A/C_TYPE', 'ENG_Test_AC_TYPE', 'COLUMN'; 

Se tutto il resto fallisce, c'è sempre

  • Crea nuova tabella (come "xENG_TEst") con nomi propri
  • copia di dati su dalla vecchia tabella
  • goccia vecchio tavolo
  • Rinomina nuova tabella al nome definitivo
+3

per me la seconda opzione ha funzionato –

+1

Inizialmente ho avuto l'errore dell'op. Quando ho eseguito sp_rename un'altra volta ho ricevuto l'errore corretto: L'oggetto 'BlahColumnID' non può essere rinominato perché l'oggetto partecipa alle dipendenze forzate. Nel mio caso è stato perché BlahColumnID ha partecipato a una funzione di colonna calcolata. – AlwaysLearning

+1

Per me ho dovuto mettere '[dbo] .' di fronte alla seconda sintassi suggerita per rendere:' [dbo]. [ENG_TEst]. [ENG_Test_A/C_TYPE] '. Il mio problema particolare era l'utilizzo del RenameColumn() di Entity Framework, che è un wrapper per sp_rename. – levininja

10

Si sta eseguendo la query nel database corretto? Ad esempio,

Use MyDatabase; 
GO 
EXEC sp_rename 'ENG_TEst.[ENG_Test_A/C_TYPE]', 'ENG_Test_AC_TYPE', 'COLUMN'; 
GO 
1

ho anche ha avuto questo problema - molto fastidioso e non ho ancora trovato una soddisfacente risposta sql (a parte quelli prolissi che prevedono la creazione di tabelle temporanee, ecc.) e non ho avuto il tempo di esplorarlo fino alla conclusione che mi sarebbe piaciuto.

Alla fine basta usare SQL Server Management Studio per farlo selezionando la tabella, facendo clic con il tasto destro sulla colonna e premendo rinomina. simples!

ovviamente preferirei sapere come farlo senza un gui ma a volte devi solo fare sh ** fatto!

+0

È possibile fare clic sull'icona "Script" nella barra degli strumenti per vedere come funziona SSMS! –

+0

@MartinSmith È possibile ottenere SSMS per eseguire lo script dell'azione di ridenominazione di una colonna tramite l'Esplora oggetti? Non riesco a capire come. L'unico modo che posso pensare è usare SQL Profiler per tracciarlo, ma è pesante. –

+1

@IainElder: è possibile ma è necessario aprire la tabella in visualizzazione struttura, quindi rinominare la colonna e quindi modificare la modifica. Se si rinomina la colonna direttamente nella vista ad albero, lo fa semplicemente senza dare la possibilità di copiarlo. –

0

Entrambi i seguenti lavori (as discussed here).

exec sp_rename 'ENG_TEst.[[ENG_Test_A/C_TYPE]]]' , 
       'ENG_Test_A/C_TYPE', 'COLUMN' 


exec sp_rename 'ENG_TEst."[ENG_Test_A/C_TYPE]"' , 
       'ENG_Test_A/C_TYPE', 'COLUMN' 
10

Questo funziona

EXEC sp_rename 
@objname = 'ENG_TEst."[ENG_Test_A/C_TYPE]"', 
@newname = 'ENG_Test_A/C_TYPE', 
@objtype = 'COLUMN' 
+1

Penso che objectname dovrebbe essere objname – curiousBoy

-1

solo cercare di rimuovere le statistiche INDICI legate a questa colonna.

I migliori saluti.

1

Ho ricevuto questo errore durante l'aggiornamento del primo database MVC5 del codice. Eliminare (clic destro, eliminare) tutte le tabelle dal mio database e rimuovere le migrazioni dalla cartella Migration ha funzionato per me.

4

mi sono imbattuto in questo oggi e ce l'ha di lavorare con:

EXECUTE sp_rename N'dbo.table_name.original_field_name', N'new_field_name', 'COLUMN' 

Per ottenere questa sintassi, ho seguito il consiglio di Martin Smith sopra - aprire la tabella in visualizzazione progettazione, rinominare la colonna e quindi fare clic su tavolo designer | generare script di modifica.Questo ha prodotto il seguente script che fa la ridenominazione in due fasi:

/* To prevent any potential data loss issues, you should review this script in 
    detail before running it outside the context of the database designer.*/ 
BEGIN TRANSACTION 
SET QUOTED_IDENTIFIER ON 
SET ARITHABORT ON 
SET NUMERIC_ROUNDABORT OFF 
SET CONCAT_NULL_YIELDS_NULL ON 
SET ANSI_NULLS ON 
SET ANSI_PADDING ON 
SET ANSI_WARNINGS ON 
COMMIT 
BEGIN TRANSACTION 
GO 
EXECUTE sp_rename N'dbo.table_name.original_field_name', N'Tmp_new_field_name_1', COLUMN' 
GO 
EXECUTE sp_rename N'dbo.table_name.Tmp_new_field_name_1', N'new_field_name', 'COLUMN' 
GO 
ALTER TABLE dbo.table_name SET (LOCK_ESCALATION = TABLE) 
GO 
COMMIT 
+0

Secondo questo e per il caso in cui SSMS non fornisce uno script di modifica, cioè la modifica di un indice; eseguire una traccia di profiler SQL mentre si rinomina per vedere quale script genera. –

0

Ho provato ogni possibile soluzione su questo sito web e niente ha funzionato per me. Ho finito per fare in modalità progettazione. Fare clic con il tasto destro sul nome della tabella e quindi fare clic su design. Poi ho cambiato il nome e salvato qui. Ha funzionato semplicemente.

Problemi correlati