2010-01-05 27 views
6

Tengo una base de datos donde todas las tablas tienen el prefijo de un conjunto de los mismos caracteres. Esto se hizo porque en algún momento estaban en una base de datos compartida configurada para proyectos favoritos con cientos de otras tablas. La aplicación, y por lo tanto la base de datos, ahora está lista para salir de esa fase y estar lista para salir sola. Me gustaría eliminar el prefijo para cada una de las tablas. ¿Hay alguna manera más fácil de hacer esto en lugar de hacer clic derecho y cambiar el nombre de cada tabla individualmente?Renombrar todas las tablas en la base de datos

+1

Habría creado una nueva base de datos, con el nuevo esquema de nombres para nuevas tablas, y seleccioné los datos. –

+0

Eche un vistazo a esto también: "Cambio masivo de nombre de tablas y procedimientos almacenados" http://stackoverflow.com/questions/1098585/mass-renaming-of-tables-and-stored-procedures – Bratch

Respuesta

2

Podría hacer algo así como crear una secuencia de comandos de toda la base de datos y hacer una cadena de reemplazo en la secuencia de comandos, ejecutarla en una nueva base de datos y luego importar los datos. Esto, por supuesto, depende de qué tan bien puede coincidir con la cadena que se reemplazará. Es posible que deba hacer los cambios correspondientes en su aplicación también. Siempre puedes probar algo como esto en una base de datos de prueba para ver si funcionaría.

Tome un vistazo a esto también - Mass Renaming of Tables and Stored Procedures

Un método tiene algún costo y el otro es similar a mi sugerencia.

+0

@Bratch +1 una manera mucho más agradable de decir lo que dije. – Hogan

+1

@Hogan Sí, pero diferente.Su respuesta suena más como escribir un guión para modificar los metadatos. No digo que deba escribir un script en absoluto, simplemente escriba la base de datos como comandos SQL (clic con el botón derecho, tareas, generar scripts). Haga un buscar/reemplazar y reemplazar el prefijo con nada, y luego ejecute el SQL modificado en la nueva base de datos. Esto también cambiará el nombre de todas las referencias a las tablas en las vistas y sprocs. Un vistazo rápido al SQL generado por el script db debería dar una idea si funcionará bien o no. – Bratch

4

Puede escribir una secuencia de comandos para ver la metainformación y modificarla, pero ¿esto no arruinará todos sus SP y consultas parametrizadas?

+1

Arruinará todo: vistas , etc. Si hay SCHEMABINDING en algo, eso tendrá que ser tratado primero ... –

0

Primero, escriba un procedimiento almacenado que tenga un parámetro de nombre de tabla y use el análisis sintáctico de cadenas y ALTER TABLE para eliminar el prefijo de la tabla especificada.

Luego, use sp_MSforeachtable para llamar a ese procedimiento para cada tabla.

Referencia: http://weblogs.sqlteam.com/joew/archive/2007/10/23/60383.aspx

9
select 'exec sp_rename @objname=' + name + ', @newname=' + replace(name ,'prefixedchars', '') 
from sysObjects 
where type = 'U' 

Los resultados de este habrá algo como:

exec sp_rename @objname=prefixedcharsTable1, @newname=Table1 
exec sp_rename @objname=prefixedcharsTable2, @newname=Table2 
exec sp_rename @objname=prefixedcharsTable3, @newname=Table3 
etc... for each table in your db 

Todo lo que tiene que hacer es copiar esas declaraciones en una nueva ventana de consulta y ejecute.

Advertencias:

  • obtendrá un mensaje de advertencia de la siguiente manera: Caution: Changing any part of an object name could break scripts and stored procedures.
  • Usted tendrá que cambiar el nombre de las tablas en cualquier procedimientos, funciones, vistas, almacenados y disparadores.
+0

Esta es una gran solución porque puede ver el script de cambio de nombre antes de ejecutarse. –

0

Puramente desde la perspectiva de "reemplazo para hacer clic con el botón derecho, renombrar" (sin renombrar referencias, procedimientos, vistas, etc.) - mezcle un poco. Obtener la lista de tablas:

select name from sys.Tables 

copiar y pegar en emacs (o su editor de línea de expresiones regulares favorito) y ejecutar un reemplazo de la línea de expresiones regulares: búsqueda \(xyz.*\) y reemplazar con SP_RENAME 'xyz\1', '\1'; Este repalces la xyzFoo mesa con Foo. Pegue las líneas nuevamente en SQL Server y ejecútelo.

Cuestiones relacionadas