Dts

Hola,
espero me puedas ayudar... Necesito importar (con DTS) un archivo que tiene tres tipos de registros distintos, los que se direccionarán a tres tablas de BD distintas... ¿sabes cómo hacer dicho filtrado?
Desde ya muchas gracias.
Luis Sandoval
Respuesta
1
Lamento la demora, pero estuve de viaje, luego vacaciones, y semana santa etc.
Si te sirve todavía si lo puedo hacer.
Primero hago una carga con el primer tipo de registro a la 1 db y así las tres.
Si todavía te sirve estoy aquí, si no lo siento.
Jorge
Desde guatemala
Si... aun me sirve...
Pero no me queda muy claro...
Me lo puedes detallar un poco más... por favor...
(No tengo mucha experiencia en sql server)
dada la sig. tabla:
c1 c2 c3
100 casa 1
200 telf 2
50 luz 3
Primera parte del dts
Hago mi conexión a la base de datos fuente, después hago una conexión a destino1, luego hago una transformación entre fuente y destino 1, en source ingreso la siguiente sentencia:
select * from tabla where c3=1,
le especifico cual es la tabla destino, verifico las transformaciones y luego ok, hago una nueva conexion destino2, hago una transformacion entre fuente y destino2, en source escribo la siguiente sentencia:
select * from tabla where c3=2
Le especifico cual es la tabla destino, verifico las transformaciones y luego ok, hago una nueva conexión destino2, hago una transformación entre fuente y destino2, en source escribo la siguiente sentencia:
select * from tabla where c3=3
Le especifico cual es la tabla destino, verifico las transformaciones y luego ok
Más o menos este debería ser el dts, aunque a grandes rasgos, o sea identifica cual es el campo que te va a servir para filtrar los datos, las conexiones están basadas en los iconos que tienes.
Jorge
Desde guatemala
Hola,
Sólo me queda una duda...
Yo necesito que el origen de los datos sea un archivo de texto plano...
¿Tu ejemplo esta referido a un archivo de texto o a una tabla?
En algún momento me comentaron algo similar, pero nunca encontré donde incorporar un select...
Desde ya muchas Gracias
Luis
Te envíe una respuesta hace rato pero no sabia si la habías recibido o no.
Lamento, al parecer no has recibido nada porque el caso continua abierto.
La sugerencia en aquel caso era levantar a tablas temporales con bcp los textos y después utilizar select.
Otra forma era linkear a una base de datos access.
Otra forma seria convertir a dbf, etc.

1 respuesta más de otro experto

Respuesta
1
No he realizado este tipo de procedimientos pero creo que es difícil que sea posible, es más fácil y práctico que programes un script previo que genere tres archivos y después inicies la carga de datos,
Saludos,
Miguel Rivas Reyes
Lima - Perú
y en que debería crear ese script... ¿en código dts? ¿O algo así?
Puedes crear un script con VBScript o WHScript, es muy fácil, te adjunto un ejemplo que he realizado,
' *** Autor: Miguel Rivas Reyes
' *** Fecha: 10 de Enero del 2003
' *** Hora: 17:40pm
' *** Objetivo: Guardar el contenido del archivo en la base de datos
' *** --- Variables para administrar el archivo
' *** Constantes para el tipo de apertura del archivo
Const ForReading = 1, ForWriting = 2, ForAppending = 3
' *** Tipos de archivos
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
' *** Objeto par
Dim fs
' *** Objeto para administrar el archivo
Dim f
' *** Objeto para leer el contenido del archivo
Dim ts
' *** Objeto para almacenar la linea leida del archivo
Dim s
' *** --- Variables para la conectividad de la base de datos
Dim con
Dim arr(8)
Dim xCon
' ***
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("e:\consola_sap\tim_consola.dat")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
' ***
set con = CreateObject("ADODB.Connection")
con.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CAINFO;Data Source=TIM-UPERFORM"
Con.Open
' *** Iniciar la lectura
do while not ts.AtEndOfStream
' *** Leer cada linea
s = ts.ReadLine
pos=1
xCon=1
do while Instr(s,"|")>0
pos=Instr(s,"|")
arr(xCon)=mid(s,1,pos-1)
s=mid(s,pos+1,len(s) - pos)
xCon=xCon+1
loop
' ***
If (arr(4) = "01") Then
' *** Ejecutar el procedimiento almacenado
Con.Execute "execute leerConsola '" & arr(1) & " " & arr(2) & "', '" & arr(3) & "', '" & arr(4) & "', " & CDbl(arr(5)) & ", " & CDbl(s) & ",0,0,0,0"
ElseIf (arr(4) = "02") Then
' *** Ejecutar el procedimiento almacenado
Con.Execute "execute leerConsola '" & arr(1) & " " & arr(2) & "', '" & arr(3) & "', '" & arr(4) & "', " & CInt(arr(5)) & ", " & CInt(arr(6)) & ", " & CInt(arr(7)) & ", " & CInt(s) & ",0,0"
ElseIf (arr(4) = "03") Then
' *** Ejecutar el procedimiento almacenado
Con.Execute "execute leerConsola '" & arr(1) & " " & arr(2) & "', '" & arr(3) & "', '" & arr(4) & "', " & CDbl(arr(5)) & ", " & CDbl(arr(6)) & ", 0, 0, " & CDbl(arr(7)) & ", " & CDbl(s)
End If
loop
' *** Cerrar el archivo
ts.Close
Set ts = Nothing
Set fs = Nothing
Set f = Nothing
' *** Cerrar la base de datos
Con.Close
Set con = Nothing
Saludos,
Miguel Rivas Reyes
Lima - Perú

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas