2012-08-07 6 views
1

Je travaille avec sql server 2000, et j'ai besoin de lire toutes les données de toutes les bases de données dans mon serveur, parce que je vais travailler avec des données, comment puis-je faire question? J'ai essayé ce code, mais ne fonctionne pas comme je le veux.Lire toutes les données de toutes les bases de données dans mon serveur

ALTER PROCEDURE TMP_INGRESO_MASIVO_DAT_CLIENTES AS 

declare @Fila as int 
declare @Script_Dinamico as varchar(8000) 
declare @Script_Dinamico1 as varchar(8000) 
declare @Nro_Registros as int 

Select Distinct cod_empresa,Nombre_Base Into #Tmp_Bases1 From Estadistica_Cobranza.Dbo.Sis_Conexion_pagos Where Cod_Estado = 1 and Proc_Automaticos= 1--capturo nombre BD 
Select Distinct Identity(Int,1,1) As Fila, cod_empresa , Nombre_Base As Name Into #Tmp_Bases From #Tmp_Bases1 

    Drop table #Tmp_Bases1 
    Select @Fila = 1 
    Select @Script_Dinamico = '' 
    Select @Script_Dinamico1 = '' 
    Select @Nro_Registros = (Select Count (*) From #Tmp_Bases) + 1--cantidad de filas +1 





    While @Fila < = @Nro_Registros 
Begin 
    Print(@Script_Dinamico) 

Select @Script_Dinamico = 'INSERT INTO buc.dbo.tmp_DAT_CLIENTES ' 
Select @Script_Dinamico = @Script_Dinamico +'(COD_EMPRESA,' 
Select @Script_Dinamico = @Script_Dinamico +'COD_SUCURSALEMPRESA,' 
Select @Script_Dinamico = @Script_Dinamico +'RUT_CLIENTE,' 
Select @Script_Dinamico = @Script_Dinamico +'RAZON_SOCIAL, ' 
Select @Script_Dinamico = @Script_Dinamico +'FECHA_CARGA,' 
Select @Script_Dinamico = @Script_Dinamico +'FECHA_MODIFICACION' 
Select @Script_Dinamico = @Script_Dinamico +')' 
Select @Script_Dinamico = @Script_Dinamico +'Select ' 
Select @Script_Dinamico = @Script_Dinamico +'COD_EMPRESA, ' 
Select @Script_Dinamico = @Script_Dinamico +'COD_SUCURSALEMPRESA, ' 
Select @Script_Dinamico = @Script_Dinamico +'RUT_CLIENTE, ' 
Select @Script_Dinamico = @Script_Dinamico +'RAZON_SOCIAL, ' 
Select @Script_Dinamico = @Script_Dinamico +'FECHA_CARGA, ' 
Select @Script_Dinamico = @Script_Dinamico +'FECHA_MODIFICACION' 
Select @Script_Dinamico = @Script_Dinamico + ' from ' + (Select Name From #tmp_bases Where Fila = @Fila) +'.Dbo.DAT_CLIENTES ' 
Select @Script_Dinamico = @Script_Dinamico + 'Where ' + (Select Name From #tmp_bases Where Fila = @Fila) +'.Dbo.DAT_CLIENTES.cod_empresa = '+ convert(varchar,(Select cod_empresa From #tmp_bases Where Fila = @Fila)) 
Select @Script_Dinamico = @Script_Dinamico +'and '+ (Select Name From #tmp_bases Where Fila = @Fila) +'.Dbo.DAT_CLIENTES.rut_cliente not in (select RUT_CLIENTE from tmp_dat_clientes' 
Select @Script_Dinamico = @Script_Dinamico+' where '+ (Select Name From #tmp_bases Where Fila = @Fila) +'.Dbo.DAT_CLIENTES.rut_cliente = buc.dbo.tmp_DAT_CLIENTES.RUT_CLIENTE)' 








      Print (@Script_Dinamico) 
      Exec (@Script_Dinamico) 
      Select @Fila = @Fila +1 
      Select @Script_Dinamico = '' 
      Select @Script_Dinamico1 = '' 



End 
Drop Table #Tmp_Bases 

GO 
SET QUOTED_IDENTIFIER OFF 
GO 
SET ANSI_NULLS ON 
GO 
+0

Que pourriez-vous avoir envie de le faire avec tous cette sortie? Toutes les données de toutes les tables de toutes les bases de données? Vraiment? –

+0

Cela suppose également que les tables ont toutes exactement la même structure – swasheck

+0

oui ont toutes les tables de la même structure – suely

Répondre

0

Je suppose que vous avez la même table (DAT_CLIENTES) dans de nombreuses bases de données, et que vous souhaitez obtenir tous ces enregistrements si le nom de la base de données est listé dans Estadistica_Cobranza.Dbo.Sis_Conexion_pagos.Nombre_Base.

Bien qu'il existe certainement de nombreuses façons de le faire, vous semblez avoir mis un ensemble en utilisant une boucle while, des tables temporaires et SQL dynamique (tous peuvent souvent avoir des conséquences sur les performances et de maintenance). Cependant, les méthodes et le style de codage côté, je suis plus concerné par cette ligne:

Select @Script_Dinamico = @Script_Dinamico+' where '+ (Select Name From #tmp_bases Where Fila = @Fila) +'.Dbo.DAT_CLIENTES.rut_cliente = buc.dbo.tmp_DAT_CLIENTES.RUT_CLIENTE)' 

Le = dans la dynamique où la clause finira par essayer de comparer les valeurs d'une colonne dans un DB chacun avec une autre colonne entière dans un autre DB. Peut-être que cela devrait être un in ou un autre opérateur qui peut comparer une valeur avec un ensemble de valeurs, plutôt que de comparer deux valeurs uniques.

Vous obtenez des messages d'erreur?

Questions connexes