Ejecutar un mismo Stored Procedure para diferentes Bases de Datos

25/01/2004 - 10:06 por Osvaldo | Informe spam
Hola. En la empresa tenemos una base de datos por cada Cliente y una base de
datos común para todos ellos.
En las bases de datos de los clientes solo deberia haber tablas, ya que mi
idea es que todo lo que es código este ubicado en la BD compartida o Comun.
Al momento tenemos un mismo SP repetido en cada una de las bases clientes.
Pero no me gusta nada esto porque implica mantener muchas bases de datos y
asegurarse que funcionen todas igual.

Que alternativa me dan a esto:

CREATE PROCEDURE spComun (@BaseDeDatos as nvarchar)
AS

USE @BaseDeDatos

Bla Bla Bla [...]

GO

No puedo usar el Use en forma dinamica dentro de un stored procedure. O si?
Se entiende mi pregunta? Lo unico que cambia es de donde va a sacar los
datos, no la logica.

Preguntas similare

Leer las respuestas

#1 Ana Castro
25/01/2004 - 10:21 | Informe spam
Si por ejemplo tuvieras que hacer una consulta del estilo en una base de
datos llamada DBCLI:

SELECT *
FROM CLIENTES

podrías utilizar SELECT * FROM DBCLI.DBO.CLIENTES
desde cualquier otra base de datos

Si lo pones por parámetro: construye esta sentencia select en una cadena y
luego ejecútala con el comando EXEC.

"Osvaldo" escribió en el mensaje
news:
Hola. En la empresa tenemos una base de datos por cada Cliente y una base


de
datos común para todos ellos.
En las bases de datos de los clientes solo deberia haber tablas, ya que mi
idea es que todo lo que es código este ubicado en la BD compartida o


Comun.
Al momento tenemos un mismo SP repetido en cada una de las bases clientes.
Pero no me gusta nada esto porque implica mantener muchas bases de datos y
asegurarse que funcionen todas igual.

Que alternativa me dan a esto:

CREATE PROCEDURE spComun (@BaseDeDatos as nvarchar)
AS

USE @BaseDeDatos

Bla Bla Bla [...]

GO

No puedo usar el Use en forma dinamica dentro de un stored procedure. O


si?
Se entiende mi pregunta? Lo unico que cambia es de donde va a sacar los
datos, no la logica.



Respuesta Responder a este mensaje
#2 Adrian Garcia
26/01/2004 - 00:31 | Informe spam
Tambien podria hacerse asi:

DECLARE @db VARCHAR(100)
SET @db= 'NORTHWIND'
EXEC( 'USE ' + @db +' SELECT * FROM PRODUCTS')

Saludos
Adrian D. Garcia
NDSoft

"Ana Castro" wrote in message
news:
Si por ejemplo tuvieras que hacer una consulta del estilo en una base de
datos llamada DBCLI:

SELECT *
FROM CLIENTES

podrías utilizar SELECT * FROM DBCLI.DBO.CLIENTES
desde cualquier otra base de datos

Si lo pones por parámetro: construye esta sentencia select en una cadena y
luego ejecútala con el comando EXEC.

"Osvaldo" escribió en el mensaje
news:
> Hola. En la empresa tenemos una base de datos por cada Cliente y una


base
de
> datos común para todos ellos.
> En las bases de datos de los clientes solo deberia haber tablas, ya que


mi
> idea es que todo lo que es código este ubicado en la BD compartida o
Comun.
> Al momento tenemos un mismo SP repetido en cada una de las bases


clientes.
> Pero no me gusta nada esto porque implica mantener muchas bases de datos


y
> asegurarse que funcionen todas igual.
>
> Que alternativa me dan a esto:
>
> CREATE PROCEDURE spComun (@BaseDeDatos as nvarchar)
> AS
>
> USE @BaseDeDatos
>
> Bla Bla Bla [...]
>
> GO
>
> No puedo usar el Use en forma dinamica dentro de un stored procedure. O
si?
> Se entiende mi pregunta? Lo unico que cambia es de donde va a sacar los
> datos, no la logica.
>
>
>


Respuesta Responder a este mensaje
#3 Osvaldo
26/01/2004 - 04:15 | Informe spam
Pero dentro de un Stored Procedure no produciría error?
porque he probado de hacerlo directamente (USE DBNAME) dentro del cuerpo del
SP y me arroja error diciendo que no se puede cambiar la BD dentro de un
stored procedure. Lo usan así ustedes?

Gracias

"Adrian Garcia" escribió en el mensaje
news:
Tambien podria hacerse asi:

DECLARE @db VARCHAR(100)
SET @db= 'NORTHWIND'
EXEC( 'USE ' + @db +' SELECT * FROM PRODUCTS')

Saludos
Adrian D. Garcia
NDSoft

"Ana Castro" wrote in message
news:
> Si por ejemplo tuvieras que hacer una consulta del estilo en una base de
> datos llamada DBCLI:
>
> SELECT *
> FROM CLIENTES
>
> podrías utilizar SELECT * FROM DBCLI.DBO.CLIENTES
> desde cualquier otra base de datos
>
> Si lo pones por parámetro: construye esta sentencia select en una cadena


y
> luego ejecútala con el comando EXEC.
>
> "Osvaldo" escribió en el mensaje
> news:
> > Hola. En la empresa tenemos una base de datos por cada Cliente y una
base
> de
> > datos común para todos ellos.
> > En las bases de datos de los clientes solo deberia haber tablas, ya


que
mi
> > idea es que todo lo que es código este ubicado en la BD compartida o
> Comun.
> > Al momento tenemos un mismo SP repetido en cada una de las bases
clientes.
> > Pero no me gusta nada esto porque implica mantener muchas bases de


datos
y
> > asegurarse que funcionen todas igual.
> >
> > Que alternativa me dan a esto:
> >
> > CREATE PROCEDURE spComun (@BaseDeDatos as nvarchar)
> > AS
> >
> > USE @BaseDeDatos
> >
> > Bla Bla Bla [...]
> >
> > GO
> >
> > No puedo usar el Use en forma dinamica dentro de un stored procedure.


O
> si?
> > Se entiende mi pregunta? Lo unico que cambia es de donde va a sacar


los
> > datos, no la logica.
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Sérgio Monteiro
26/01/2004 - 06:51 | Informe spam
Cuando uno hace como Adrian (Con Cadenas String o SQL Dinamicos), no se
prodcue el error. Pero el tema es que todas las operaciones tienes que estar
encadenadas en la misma cadena String o el comando se va a ejecutar en la
base actual...



saludos,


Sérgio Monteiro - Brasil
www.sqlpass.org
"Osvaldo" escreveu na mensagem
news:%
Pero dentro de un Stored Procedure no produciría error?
porque he probado de hacerlo directamente (USE DBNAME) dentro del cuerpo


del
SP y me arroja error diciendo que no se puede cambiar la BD dentro de un
stored procedure. Lo usan así ustedes?

Gracias

"Adrian Garcia" escribió en el mensaje
news:
> Tambien podria hacerse asi:
>
> DECLARE @db VARCHAR(100)
> SET @db= 'NORTHWIND'
> EXEC( 'USE ' + @db +' SELECT * FROM PRODUCTS')
>
> Saludos
> Adrian D. Garcia
> NDSoft
>
> "Ana Castro" wrote in message
> news:
> > Si por ejemplo tuvieras que hacer una consulta del estilo en una base


de
> > datos llamada DBCLI:
> >
> > SELECT *
> > FROM CLIENTES
> >
> > podrías utilizar SELECT * FROM DBCLI.DBO.CLIENTES
> > desde cualquier otra base de datos
> >
> > Si lo pones por parámetro: construye esta sentencia select en una


cadena
y
> > luego ejecútala con el comando EXEC.
> >
> > "Osvaldo" escribió en el mensaje
> > news:
> > > Hola. En la empresa tenemos una base de datos por cada Cliente y una
> base
> > de
> > > datos común para todos ellos.
> > > En las bases de datos de los clientes solo deberia haber tablas, ya
que
> mi
> > > idea es que todo lo que es código este ubicado en la BD compartida o
> > Comun.
> > > Al momento tenemos un mismo SP repetido en cada una de las bases
> clientes.
> > > Pero no me gusta nada esto porque implica mantener muchas bases de
datos
> y
> > > asegurarse que funcionen todas igual.
> > >
> > > Que alternativa me dan a esto:
> > >
> > > CREATE PROCEDURE spComun (@BaseDeDatos as nvarchar)
> > > AS
> > >
> > > USE @BaseDeDatos
> > >
> > > Bla Bla Bla [...]
> > >
> > > GO
> > >
> > > No puedo usar el Use en forma dinamica dentro de un stored


procedure.
O
> > si?
> > > Se entiende mi pregunta? Lo unico que cambia es de donde va a sacar
los
> > > datos, no la logica.
> > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Adrian Garcia
26/01/2004 - 11:39 | Informe spam
El temas es que con el EXEC estas armando por decir otro batch de
instrucciones. Por eso debes jecutar todo entre los parentesis.
Pruebalo y veraz. Si anda dentro de un stored.

Saludos
Adrian D. Garcia
NDSoft


"Osvaldo" wrote in message
news:%
Pero dentro de un Stored Procedure no produciría error?
porque he probado de hacerlo directamente (USE DBNAME) dentro del cuerpo


del
SP y me arroja error diciendo que no se puede cambiar la BD dentro de un
stored procedure. Lo usan así ustedes?

Gracias

"Adrian Garcia" escribió en el mensaje
news:
> Tambien podria hacerse asi:
>
> DECLARE @db VARCHAR(100)
> SET @db= 'NORTHWIND'
> EXEC( 'USE ' + @db +' SELECT * FROM PRODUCTS')
>
> Saludos
> Adrian D. Garcia
> NDSoft
>
> "Ana Castro" wrote in message
> news:
> > Si por ejemplo tuvieras que hacer una consulta del estilo en una base


de
> > datos llamada DBCLI:
> >
> > SELECT *
> > FROM CLIENTES
> >
> > podrías utilizar SELECT * FROM DBCLI.DBO.CLIENTES
> > desde cualquier otra base de datos
> >
> > Si lo pones por parámetro: construye esta sentencia select en una


cadena
y
> > luego ejecútala con el comando EXEC.
> >
> > "Osvaldo" escribió en el mensaje
> > news:
> > > Hola. En la empresa tenemos una base de datos por cada Cliente y una
> base
> > de
> > > datos común para todos ellos.
> > > En las bases de datos de los clientes solo deberia haber tablas, ya
que
> mi
> > > idea es que todo lo que es código este ubicado en la BD compartida o
> > Comun.
> > > Al momento tenemos un mismo SP repetido en cada una de las bases
> clientes.
> > > Pero no me gusta nada esto porque implica mantener muchas bases de
datos
> y
> > > asegurarse que funcionen todas igual.
> > >
> > > Que alternativa me dan a esto:
> > >
> > > CREATE PROCEDURE spComun (@BaseDeDatos as nvarchar)
> > > AS
> > >
> > > USE @BaseDeDatos
> > >
> > > Bla Bla Bla [...]
> > >
> > > GO
> > >
> > > No puedo usar el Use en forma dinamica dentro de un stored


procedure.
O
> > si?
> > > Se entiende mi pregunta? Lo unico que cambia es de donde va a sacar
los
> > > datos, no la logica.
> > >
> > >
> > >
> >
> >
>
>


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