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
4

1 に答える 1

0

多くのデータベースに同じテーブル ( DAT_CLIENTES) があり、データベース名が にリストされている場合、これらすべてのレコードを取得したいと考えていますEstadistica_Cobranza.Dbo.Sis_Conexion_pagos.Nombre_Base

これを行うには確かに多くの方法がありますが、while ループ、一時テーブル、および動的 SQL を使用して 1 つをまとめたようです (すべてパフォーマンスとメンテナンスに影響を与えることがよくあります)。ただし、コーディング方法とスタイルは別として、次の行に最も関心があります。

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

動的な where 句では=、ある DB の列の値をそれぞれ別の DB の別の列全体と比較しようとします。おそらく、これは、in2 つの単一の値を比較するのではなく、値を一連の値と比較できる、またはその他の演算子である必要があります。

エラーメッセージは表示されますか?

于 2012-10-17T18:58:27.013 に答える