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
2 Respuestas
Respuesta de mrivasr
1
1
mrivasr, Java J2ee Jee Oracle BEA JBoss SQL Server
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ú
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.