Dinámico o no dinámico....

30/11/2005 - 11:23 por keko | Informe spam
Hola,

Tengo que aplicar el mismo script a varias bases de datos que son
iguales en estructura.

Hasta ahora o lo hacia cambiando de base de datos y aplicando el script
o me creo un cursor donde obtengo los nombres de las bases de datos y
por sql dinámico lo aplico a cada base de datos, el problema es que el
sql dinámico, además de los problemas que ya conocemos, hace que el
script sea un tanto dificil de mantener puesto que gran parte del mismo
es interpretado por el analizador de consultas como texto y claro, no lo
corrige, si, lo hago a parte y lo soluciono pero aun así no me gusta.

¿Existe algun. forma de hacerlo que no sea con dinámico?

Un saludo, y gracias.
K

Preguntas similare

Leer las respuestas

#6 keko
30/11/2005 - 14:04 | Informe spam
Ok, de acuerdo, es mas para temas de mantenimientos de estos que hago y
por echarles un vistazo.

Muchas gracias.

Lo que me has contado del osql me ha gustado mucho.

K



Carlos Sacristán wrote:
Los hay, los hay. Echa un vistazo a este artículo:
http://www.mssqlcity.com/Articles/U...ndocSP.htm

Eso sí, ten en cuenta que al ser no documentados, no se te ocurra poner
algo en producción que dependa de ellos porque Microsoft no garantiza que
vayan a seguir estando en versiones futuras, y tampoco te va a dar
soporte...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"keko" escribió en el mensaje
news:

Gracias por la compresión :). y gracias por ambas soluciones, el caso es
que ese procedimiento no documentado me vendrá bien en ocasiones... hay
mas de esos?... lo del batch lo voy a probar a ver que tal.

Muchas gracias.

K


Carlos Sacristán wrote:

Entiendo tu enfado Keko, muchas veces las cosas no dependen de





nosotros

y nos obligan a hacer algo que en principio iba a ser puntual y que sin
embargo al final se termina convirtiendo en lo habitual.

En fin, lo único que se me ocurre es utilizar el procedimiento
almacenado sp_MSforeachdb (no documentado). Lo que hace es ejecutar las
sentencias que le pases como parámetro a cada una de las bases de datos





de

tu servidor, por ejemplo:

EXEC sp_MSforeachdb @command1="print '?' DBCC CHECKDB ('?')"

El problema es que es para sentencias cortas. Si te fijas en el





código

verás que sólo tiene tres parámetros @command y lo máximo que le puedes
asignar a cada uno son 1000 caracteres, así que si tu script es muy





grande

no te va a servir.

Otra solución entonces es, usando la misma filosofía de este
procedimiento, usar el programa de línea de comandos OSQL (echa un





vistazo

en los BOL si no conoces esta utilidad) que permite indicarle el script





a

ejecutar. Lo único que habría que hacer es escribir el comando





correctamente

indicando la base de datos. Por ejemplo:

SELECT 'osql -E -S tuServidor -d ' + name +' -i tuScript.sql'





FROM

master.dbo.sysdatabases

Verás que te muestra el comando OSQL que te permite conectarte a un
servidor con seguridad integrada para ejecutar un script por cada una de





las

bases de datos de dicho servidor. Luego únicamente tendrías que copiar y
pegar cada una de esas líneas en un archivo por lotes, ejecutarlo y





listo.

Es trabajo pero menos...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"keko" escribió en el mensaje
news:#


Por desgracia aplico scripts (de varios tipos) cada menos de lo que me
gustaria y normalmente sobre 100 bases de datos... mira, cosas que no
deberían ser pero son.

Los scripts son del tipo, actualizar datos de tablas maestras que han
cambiado o se han añadido filas, hasta, incluso, cambios en la
estructura de alguna que otra tabla :D

Y ademas, estan todas replicadas... y por último sincronizan con un
asociado de suscripción alternativo que se ha ido a tomar viento porque
no aceptaba bien los cambios de estos scripts y tumbo el sistema asi que
lo desmonté.

Todo esto porque, porque todo es para ayer... y si no... para antes de
ayer...

Aaaagggg! tengo un mal dia.

K



keko wrote:


Hola,

Tengo que aplicar el mismo script a varias bases de datos que son
iguales en estructura.

Hasta ahora o lo hacia cambiando de base de datos y aplicando el script
o me creo un cursor donde obtengo los nombres de las bases de datos y
por sql dinámico lo aplico a cada base de datos, el problema es que el
sql dinámico, además de los problemas que ya conocemos, hace que el
script sea un tanto dificil de mantener puesto que gran parte del mismo
es interpretado por el analizador de consultas como texto y claro, no









lo

corrige, si, lo hago a parte y lo soluciono pero aun así no me gusta.

¿Existe algun. forma de hacerlo que no sea con dinámico?

Un saludo, y gracias.
K
















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida