Base de datos como parametro de procedimiento

18/12/2006 - 16:49 por noticiasSQL | Informe spam
Tengo que traspasar datos entre varias tablas de dos bases de datos iguales.
Los criterios de traspaso solo tienen que ver con la lógica de la
aplicación.
Lo tenemos planteado de la siguiente forma

INSERT INTO [baseDatos1].[tablaA] ([campo1],[campo2], [campo3],.)
SELECT [campo1],[campo2], [campo3],.
FROM [baseDatos2].[tablaA]
WHERE

Necesitaría que los valores de [baseDatos1] y [baseDatos2] fueran variables
cargadas con los nombre de las bases de datos,
lo he intentado de la siguiente forma:

DECLARE @bd1 VARCHAR(30), @bd2 VARCHAR(30)

SELECT @bd1='basedatos1', @bd2='basedatos2'

INSERT INTO @bd1.[tablaA] ([campo1],[campo2], [campo3],.)
SELECT [campo1],[campo2], [campo3],.
FROM @bd2.[tablaA]
WHERE

De esta forma no se puede hacer referencia, a las bases de datos.
Sabe alguien cual es la forma correcta de hacerlo.
En resumen, utilizar una variable con el nombre de la base de datos e
incluir esta variable en sentencias SELECT e INSERT.
 

Leer las respuestas

#1 Maxi
19/12/2006 - 21:31 | Informe spam
Hola, en 2000 si en 2005 no si configuras el contexto de ejecucion con
Execute as en tu SP's


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Isaias" escribió en el mensaje
news:
Alex

Uno de los "contras" en el ejemplo, es que el usuario que ejecute dicho
script, debera tener DERECHOS de inserccion en las tablas mencionadas.

Cierto?
Saludos
IIslas


"Alejandro Mesa" wrote:

noticiasSQ,

Pudieras usar sql dinamico.

declare @sql nvarchar(4000)
declare @db1 sysname, @db2 sysname

SELECT @db1 = N'basedatos1', @db2 = N'basedatos2'

set @sql = N'INSERT INTO [' + @db1 + N'].dbo.[tablaA]
([campo1],[campo2])'
set @sql = @sql + N'select c1, c2 from [' + @db2 + N'].dbo.tablaA'

exec sp_executesql
go

Te recomiendo que leas el siguiente articulo antes de empezar a usar sql
dinamico. El uso de sql dinamico tiene pros y cons que deben ser
evaluados
antes de implementar su uso.

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html


AMB


"noticiasSQL" wrote:

> Tengo que traspasar datos entre varias tablas de dos bases de datos
> iguales.
> Los criterios de traspaso solo tienen que ver con la lógica de la
> aplicación.
> Lo tenemos planteado de la siguiente forma
>
> INSERT INTO [baseDatos1].[tablaA] ([campo1],[campo2], [campo3],.)
> SELECT [campo1],[campo2], [campo3],.
> FROM [baseDatos2].[tablaA]
> WHERE
>
> Necesitaría que los valores de [baseDatos1] y [baseDatos2] fueran
> variables
> cargadas con los nombre de las bases de datos,
> lo he intentado de la siguiente forma:
>
> DECLARE @bd1 VARCHAR(30), @bd2 VARCHAR(30)
>
> SELECT @bd1='basedatos1', @bd2='basedatos2'
>
> INSERT INTO @bd1.[tablaA] ([campo1],[campo2], [campo3],.)
> SELECT [campo1],[campo2], [campo3],.
> FROM @bd2.[tablaA]
> WHERE
>
> De esta forma no se puede hacer referencia, a las bases de datos.
> Sabe alguien cual es la forma correcta de hacerlo.
> En resumen, utilizar una variable con el nombre de la base de datos e
> incluir esta variable en sentencias SELECT e INSERT.
>
>
>
>

Preguntas similares