Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Reemplazar datos BBDD por otro

Estas en el tema de Reemplazar datos BBDD por otro en el foro de SQL Server en Foros del Web. Buenas tardes, tengo dos BBDD distintas, las cuales se hacen referencia entre sí, es decir, hay procedimientos, vistas, triggers o funciones de una BBDD que ...
  #1 (permalink)  
Antiguo 23/04/2014, 08:40
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Reemplazar datos BBDD por otro

Buenas tardes,

tengo dos BBDD distintas, las cuales se hacen referencia entre sí, es decir, hay procedimientos, vistas, triggers o funciones de una BBDD que hacen referencia a la otra, y viceversa.

El problema es que necesito reemplazar todas las referencias por el nombre de una BBDD nueva, y hacerlo uno a uno es muchísimo trabajo. Necesito algún script que lo reemplazara automáticamente, sin tener que ir buscando objeto a objeto y reemplazando individualmente.

Tengo algún script que me busca todos los objetos que contienen una BBDD concreta, y el problema viene al reemplazar, que lo intento reemplazando el syscomments, y aunque tengo el valor a 1 de allow updates del sp_configure, me sigue dando el error de que no se pueden modificar los catálogos del sistema.

Necesito ayuda con esto. Gracias por adelantado.

Saludos.
  #2 (permalink)  
Antiguo 23/04/2014, 08:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Reemplazar datos BBDD por otro

ya intentatste obteniendo todos tus scripts y realizando el reemplazo desde el script? creo que seria ms facil obtener todos los scripts del alter de los objetos que hacen esa referencia y cambiarlo con un ctrl+h y reemplazar no :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 23/04/2014, 09:21
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Reemplazar datos BBDD por otro

Hola Libras,

ante todo gracias por la respuesta.

En cuanto a tu respuesta no entiendo muy bien lo que quieres decir.

Yo hago esto y obtengo todos los objetos que contienen la palabra que yo busco:

Código SQL:
Ver original
  1. SELECT DISTINCT OBJECT_NAME(ID)
  2. FROM SYSCOMMENTS
  3. WHERE TEXT LIKE '%BBD1%'
  4. ORDER BY OBJECT_NAME(ID)

o bien esto, que encuentro dónde está la palabra que yo busco:

Código SQL:
Ver original
  1. SELECT definition
  2. FROM sys.sql_modules
  3. WHERE definition LIKE '%BBDD1%'

Pero a partir de aquí no tengo muy claro cómo reemplazar esa palabra (BBDD1) por otra.

Lo estoy intentando así:
Código SQL:
Ver original
  1. UPDATE  syscomments
  2. SET [text] = REPLACE([text], 'BBDD1', 'BBDD2')

Y obtengo el siguiente error:

Mens. 259, Nivel 16, Estado 1, Línea 1
No están permitidas las actualizaciones ad hoc de los catálogos del sistema.

He modificado el valor que permite la modificación, y aún así no me permite hacer las modificaciones:

Código SQL:
Ver original
  1. EXEC sp_configure 'allow updates', 1
  2. reconfigure WITH override
Espero que entiendas lo que quiero decir.

Saludos y gracias.

Última edición por gnzsoloyo; 23/04/2014 a las 10:26
  #4 (permalink)  
Antiguo 23/04/2014, 09:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Reemplazar datos BBDD por otro

no lo que yo te digo es que obtengas los scripts de los create o alter donde tengas la cadena que buscas(con un sp_helptext obtienes eso) y de ahi apliques el cambio porque creo que cambiarlo como lo quieres hacer creo que no se puede porque quieres cambiar texto....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 23/04/2014, 10:12
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Reemplazar datos BBDD por otro

Así también lo he intentado, de hecho tengo el siguiente script:

Código SQL:
Ver original
  1. DECLARE @TextoBuscado NVARCHAR(MAX);
  2. DECLARE @Objeto VARCHAR(128);
  3. DECLARE @TextoActual NVARCHAR(MAX);
  4. DECLARE @Linea INT;
  5.  
  6. SET @TextoBuscado = 'BBDD1'
  7.  
  8. DECLARE @Busqueda TABLE
  9. (
  10.       Objeto VARCHAR(128),
  11.       Linea INT,
  12.       Texto NVARCHAR(MAX)
  13. );
  14. DECLARE @Texto TABLE
  15. (
  16.       Texto NVARCHAR(MAX)
  17. );  
  18.  
  19. DECLARE CR_OBJETOS CURSOR FOR
  20.       SELECT
  21.             name
  22.       FROM
  23.             SYSOBJECTS
  24.       WHERE
  25.             XTYPE IN('P', 'FN', 'V', 'U'); --P: Stored Procedures FN: User-Defined Functions V: View U: User Table
  26.  
  27. OPEN CR_OBJETOS;
  28.  
  29. FETCH NEXT FROM CR_OBJETOS INTO @Objeto;
  30.  
  31. WHILE @@FETCH_STATUS = 0  
  32. BEGIN  
  33.      
  34.       SET @Linea = 1;
  35.      
  36.       DELETE FROM @Texto;
  37.      
  38.       INSERT INTO @Texto
  39.       EXEC SP_HELPTEXT @Objeto;
  40.      
  41.       DECLARE CR_TEXTO CURSOR FOR
  42.             SELECT * FROM @Texto;
  43.      
  44.       OPEN CR_TEXTO;
  45.      
  46.       FETCH NEXT FROM CR_TEXTO INTO @TextoActual;
  47.      
  48.       WHILE @@FETCH_STATUS = 0  
  49.       BEGIN
  50.      
  51.             IF @TextoActual LIKE '%'+@TextoBuscado+'%'
  52.             BEGIN
  53.  
  54.                   INSERT INTO @Busqueda
  55.                   (
  56.                         Objeto,
  57.                         Linea,
  58.                         Texto
  59.                   )
  60.                   VALUES
  61.                   (
  62.                         @Objeto,
  63.                         @Linea,
  64.                         @TextoActual
  65.                   );
  66.            
  67.             END;
  68.            
  69.             SET @Linea = @Linea +1;
  70.            
  71.             FETCH NEXT FROM CR_TEXTO INTO @TextoActual;
  72.      
  73.       END;
  74.       CLOSE CR_TEXTO;
  75.       DEALLOCATE CR_TEXTO;
  76.      
  77.       FETCH NEXT FROM CR_OBJETOS INTO @Objeto;
  78. END;
  79.  
  80. CLOSE CR_OBJETOS;
  81. DEALLOCATE CR_OBJETOS;
  82.  
  83. SELECT * FROM @Busqueda;
Pero en algunos objetos la línea (EXEC SP_HELPTEXT @Objeto;) me da el siguiente error:

(0 filas afectadas)
Mens 15009, Nivel 16, Estado 1, Procedimiento sp_helptext, Línea 54
El objeto 'User' no existe en la base de datos 'BBDD1' o no es válido para esta operación.

He revisado todos los objetos que dan problemas y si existen en la BBDD, así que me he quedado atascada en ese punto.

Última edición por gnzsoloyo; 23/04/2014 a las 10:27 Razón: Usar HIGHLIGHT "SQL" por favor.
  #6 (permalink)  
Antiguo 23/04/2014, 10:13
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Reemplazar datos BBDD por otro

Creo que seria lo mas "limpio" y lo mas aconsejable, antes de ni siquiera pensar (o intentar) modificar los objetos del sistema, como las vistas.
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 23/04/2014, 10:15
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Reemplazar datos BBDD por otro

Lo que LIBRAS comenta, es que obtengas el SCRIPT de la creación de la base de datos y sobre esta, modificar lo que gustes

¿se comprende la idea?
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 23/04/2014, 10:23
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Reemplazar datos BBDD por otro

Gracias por tu respuesta iislas.

Entiendo la idea, el problema es que la BBDD se ha ido creando poco a poco, añadiendo y modificando objetos, y no hay un script único que contenga todos los objetos de la BBDD.
  #9 (permalink)  
Antiguo 23/04/2014, 10:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Reemplazar datos BBDD por otro

Que TU lo generes, hay una opción para generar el script de la base de datos con TODOS sus objetos:

Databases --> (click botón derecho sobre la base) Task --> Generate Scripts

Lo guardas en un archivo y ahí, precisamente AHI, haces la modificación.
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 23/04/2014, 10:36
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Reemplazar datos BBDD por otro

Gracias de nuevo iislas.

Voy a probarlo así y a ver si funciona.

Saludos.
  #11 (permalink)  
Antiguo 23/04/2014, 10:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Reemplazar datos BBDD por otro

Cita:
Iniciado por iislas Ver Mensaje
Que TU lo generes, hay una opción para generar el script de la base de datos con TODOS sus objetos:

Databases --> (click botón derecho sobre la base) Task --> Generate Scripts

Lo guardas en un archivo y ahí, precisamente AHI, haces la modificación.
Entendio mi idea amigo ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 23/04/2014, 11:02
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Reemplazar datos BBDD por otro

Esta mas clara que el agua que baja de los manantiales del Ixtaccihuatl :)
__________________
MCTS Isaias Islas

Etiquetas: bbdd, reemplazar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:17.