2012-08-07 2 views
1

저는 SQL Server 2000을 사용하고 있으며 일부 데이터를 사용하기 때문에 내 서버의 모든 데이터베이스 에서 모든 데이터를 읽어야합니다. 어떻게해야합니까? 질문? 이 코드를 시도했지만 원하는대로 작동하지 않습니다.내 서버의 모든 데이터베이스에서 모든 데이터 읽기

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

이 출력을 통해 무엇을 할 수 있습니까? 모든 데이터베이스의 모든 테이블의 모든 데이터? 정말? –

+0

이것은 또한 테이블이 모두 똑같은 구조를 가지고 있다고 가정합니다. – swasheck

+0

예 모든 테이블에 같은 구조가 있습니다. – suely

답변

0

난 당신이 여러 데이터베이스에 같은 테이블 (DAT_CLIENTES)가 있다고 가정하고 데이터베이스 이름이 Estadistica_Cobranza.Dbo.Sis_Conexion_pagos.Nombre_Base에 나열되어있는 경우이 기록을 모두 싶어하고있다.

확실히 여러 가지 방법이 있지만 while 루프, 임시 테이블 및 동적 SQL (모두 성능 및 유지 관리 관련 의미가있을 수 있음)을 사용하여 하나의 테이블을 구성한 것처럼 보입니다.

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)' 

절은 다른 전체 열 하나의 DB 각 컬럼의 값을 비교하려고 결국 어디에 동적의 =을 그러나, 옆 방법과 코딩 스타일, 나는이 선을 가장 걱정 다른 DB에. 아마도 이것은 in이거나 두 개의 단일 값을 비교하기보다는 값 집합과 값을 비교할 수있는 다른 연산자 여야합니다.

오류 메시지가 표시됩니까?

관련 문제