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

#1 Carlos Sacristán
30/11/2005 - 11:33 | Informe spam
Pero tanto a menudo lo ejecutas que no puedes hacerlo manualmente? Qué
clase de script es ese?


Un saludo

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

"keko" escribió en el mensaje
news:
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

Respuesta Responder a este mensaje
#2 keko
30/11/2005 - 12:06 | Informe spam
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


Respuesta Responder a este mensaje
#3 Carlos Sacristán
30/11/2005 - 12:47 | Informe spam
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
>
>

Respuesta Responder a este mensaje
#4 keko
30/11/2005 - 12:57 | Informe spam
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










Respuesta Responder a este mensaje
#5 Carlos Sacristán
30/11/2005 - 13:09 | Informe spam
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
>>>
>>>
>>
>
>
>

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida