2010-06-22 72 views
34

Si intento ejecutar por debajo de consulta:¿Cómo puedo resolver "O el parámetro @objname es ambiguo o el @objtype reclamado (COLUMN) es incorrecto"?

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

Me aparece un error:

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

¿Cómo puedo solucionarlo?

+2

Muéstranos la definición de 'ENG_MYTALLY' – egrunin

+0

En mi caso, recibí este error porque el nombre de la tabla que traté de actualizar no existía. – Samuel

+0

Esto se debe a nombres de Conflictos de clase (modelo), cuando se crean automáticamente las tablas y ... –

Respuesta

22

Nuts. Llegué a este mismo error hace unas semanas, y después de un montón de tiempo perdido descubrí cómo hacerlo funcionar, pero desde entonces lo he olvidado. (No es de mucha ayuda, excepto para decir que sí, se puede hacer.)

¿Has probado diferentes combinaciones de soportes, o con y sin brackest? p.ej.

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'; 

Si todo lo demás falla, siempre hay

  • Crear nueva tabla (como "xENG_TEst") con nombres propios
  • Copiar datos sobre de la mesa de edad
  • gota mesa de edad
  • Cambie el nombre de la nueva tabla al nombre final
+3

para mí la segunda opción funcionó –

+1

Al principio obtuve el error de Op. Sys. Solo. Cuando ejecuté sp_rename en otro momento, recibí el error correcto: no se puede cambiar el nombre del objeto 'BlahColumnID' porque el objeto participa en dependencias forzadas. En mi caso fue porque BlahColumnID participó en una función de Columna Computada. – AlwaysLearning

+1

Para mí tuve que poner '[dbo] .' delante de la segunda sintaxis sugerida para hacer:' [dbo]. [ENG_TEst]. [ENG_Test_A/C_TYPE] '. Mi problema particular era usar RenameColumn() de Entity Framework, que es un contenedor para sp_rename. – levininja

10

¿Está ejecutando la consulta en la base de datos correcta? es decir,

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

i Tenía este problema, muy molesto y aún no he encontrado una respuesta SQL satisfactoria (aparte de las largas y complicadas que implican la creación de tablas temporales, etc.) y no tuve tiempo de explorarla hasta la conclusión que me hubiera gustado.

Al final solo usé SQL Server Management Studio para hacerlo seleccionando la tabla, haciendo clic con el botón derecho en la columna y pulsando Cambiar nombre. simples!

obviamente preferiría saber cómo hacerlo sin gui, pero a veces simplemente tienes que irte hecho!

+0

¡Puede hacer clic en el icono "Guión" en la barra de herramientas para ver cómo lo hace SSMS! –

+0

@MartinSmith ¿Puede hacer que SSMS script la acción de cambiar el nombre de una columna a través del Explorador de objetos? No puedo resolver cómo. La única forma en que puedo pensar es usar el Analizador de SQL para rastrearlo, pero eso es pesado. –

+1

@IainElder: puede hacerlo, pero debe abrir la tabla en la vista de diseño, luego cambie el nombre de la columna y luego realice un script del cambio. Si cambia el nombre de la columna directamente en la vista de árbol, simplemente lo hace sin dar la oportunidad de crear una secuencia de comandos. –

0

Ambos del siguiente trabajo (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

Esto funciona

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

Creo que objectname debe ser objname – curiousBoy

-1

simplemente tratar de eliminar las estadísticas ÍNDICES vinculados a esta columna.

Atentamente.

1

Recibí este error al actualizar primero el código de la base de datos MVC5. Dejar caer (clic derecho, eliminar) todas las tablas de mi base de datos y eliminar las migraciones de la carpeta Migración funcionó para mí.

4

me encontré con esto hoy y tengo que trabajar con:

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

Para conseguir esta sintaxis, he seguido el consejo de Martin Smith anterior - abrir la tabla en vista diseño, cambiar el nombre de la columna y haga clic en la tabla diseñador | generar secuencia de comandos de cambioEsto produjo el guión debajo de la cual hace el cambio de nombre en dos pasos:

/* 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

Segundo esto y para el caso donde SSMS no proporciona una secuencia de comandos de cambio, es decir, cambiar un índice; ejecute un rastreo del generador de perfiles SQL mientras cambia el nombre para ver qué script genera. –

0

He intentado todas las soluciones posibles en este sitio web y nada funcionó para mí. Terminé haciendo en el modo de diseño. Haga clic con el botón derecho en el nombre de la tabla y luego haga clic en diseño. Luego cambié el nombre y guardé aquí. Trabajó simplemente.

Cuestiones relacionadas