Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Importar datos de un txt a una tabla de sqlserver 2008

Estas en el tema de Importar datos de un txt a una tabla de sqlserver 2008 en el foro de SQL Server en Foros del Web. Cuando se ejecuto todo desde la aplicación se lanza el procedimiento donde se encuentra toda la carga de los datos, esto lo observe al hacer ...
  #1 (permalink)  
Antiguo 26/02/2015, 15:32
 
Fecha de Ingreso: febrero-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Información Importar datos de un txt a una tabla de sqlserver 2008

Cuando se ejecuto todo desde la aplicación se lanza el procedimiento donde se encuentra toda la carga de los datos, esto lo observe al hacer Tuning pero le hice luego debug y encontré que al momento de llegar a la linea donde se encuentra el comando "EXEC sp_executesql @query" se crea una nueva pestaña con el nombre "Dynamic-Transact SQL" pero en ese momento el sql server me lanza un error "Object reference not set to an instance of object", todo esto en sql server 2012 al investigar parece ser un error del sql server y que en un comentario de Microsoft dice que es un problema que se resuelve con una próxima actualización pero como este comentario ya fue hace tiempo debería estar ya solucionada no se si me puedan colaborar.

Adicional a esto pongo el link donde encontré respuesta de Microsoft y una solución alternatica pero no puedo usarla ya que se me niega el acceso al archivo que se debe modificar entonces sigo en las mismas.

https://connect.microsoft.com/SQLSer...-sp-executesql

muchas gracias!!!
Perdón si cometo algún error pero es la primera vez en un foro

Última edición por gnzsoloyo; 26/02/2015 a las 16:00 Razón: Resucitando threads obsoletos, separado a uno propio.
  #2 (permalink)  
Antiguo 26/02/2015, 16:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

perdona, pero creo que me perdí de algo, no entiendo tu posta.....
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 26/02/2015, 16:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

Podrias explicarte mejor...porque no se entiende nada....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 26/02/2015, 16:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

Bueno, no soy el único...
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 26/02/2015, 16:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

jajajajaja muy buena amigo Iislas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 27/02/2015, 08:48
 
Fecha de Ingreso: febrero-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Exclamación Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

jajaja ok que pena veo que modificaron el post y se perdió el inicio.
Les explico, necesito subir información por medio de un archivo plano a la base de datos trabajo con sql server 2012, el procedimiento por el cual lo hago es en esencia el siguiente:

ALTER PROCEDURE [dbo].[Cargar_Datos]

@Dire NVARCHAR(MAX),
@EmprId uniqueidentifier

as

BEGIN
DECLARE @query Nvarchar(MAX)

SET @query=N'

INSERT INTO Tabla_Datos
with (KEEPIDENTITY)
(
Campo1,
Campo2
)
SELECT a.* FROM OPENROWSET( BULK '+ CHAR(39) + @Dire + CHAR(39) +',
FORMATFILE = ''C:\ArchivosFormato\Archivo.fmt'') AS a;'

EXEC sp_executesql @query


end


Use "sp_executesql" ya que necesito enviar la ruta donde se encuentra el archivo por medio de un parámetro y como la instrucción "BULK" solo acepta una cadena no puedo incluir el parámetro por que lo tomaría como texto y no lo reconoce como un parámetro, investigando un poco encontré como solución usar la instrucción "sp_executesql" que seria como les muestro en el procedimiento arriba y funciono pero a medias por decirlo así ya que desde la aplicación no sucede nada por que no se carga la información del archivo plano.

Hice un tuning con la herramienta sql server profiler y efectivamente se estaba llamando al procedimiento y el envió de parámetros estaba bien por lo que decidí hacer debug al procedimiento paso a paso con F11 y encontre que cuando se ejecutar la linea que lanza esta instrucción "EXEC sp_executesql @query" se abre una nueva pestaña con el nombre "Dynamic-Transact SQL" y arroja el siguiente error "Object reference not set to an instance of object" si uno le da aceptar es como entrar en un bucle por que presiono nuevamente F11 y arroja de nuevo el error, entonces lo que hago es o cierro o cambio esta ventana y vuelvo a donde quedo la ejecución del procedimiento que seria en la linea "EXEC sp_executesql @query" vuelvo a presionar F11 se ejecuta bien la instrucción y se carga la información a la tabla desde el archivo plano, por esto digo que funciona pero cuando todo se hace desde el aplicativo supongo que llega al error y frena todo.

[URL=http://s296.photobucket.com/user/pipegos/media/Captura_zpse5k6cc2w.png.html][IMG]http://i296.photobucket.com/albums/mm180/pipegos/Captura_zpse5k6cc2w.png[/IMG][/URL]

En mi primer post puse un link donde tratan el tema pero la solución que dan no la puedo usar por que no puedo modificar el archivo al que allí se refieren.

Les agradezco si me pueden colaborar
  #7 (permalink)  
Antiguo 27/02/2015, 09:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

¿What?

¿Y entonces para que se quemaron las pestañas diseñando un servicio tan eficiente como SSIS (SQL Server Integration Services)?
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 27/02/2015, 09:34
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

Con permiso, encontré estos 2 post que te podrían ayudar si los revisas.

http://stackoverflow.com/questions/16966922/how-can-i-specify-the-path-to-a-file-dynamically-in-openrowsetbulk

http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/

Saludos,
  #9 (permalink)  
Antiguo 27/02/2015, 09:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

pregunta...si entendi bien estas usando este query para hacer un bulk insert...

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[Cargar_Datos]
  2. @Dire NVARCHAR(MAX),
  3. @EmprId uniqueidentifier
  4. AS
  5.  
  6. BEGIN
  7. DECLARE @query Nvarchar(MAX)
  8.  
  9. SET @query=N'
  10.  
  11. INSERT INTO Tabla_Datos
  12. with (KEEPIDENTITY)
  13. (
  14. Campo1,
  15. Campo2
  16. )
  17. SELECT a.* FROM OPENROWSET( BULK '+ CHAR(39) + @Dire + CHAR(39) +',
  18. FORMATFILE = ''C:\ArchivosFormato\Archivo.fmt'') AS a;'
  19.  
  20. EXEC sp_executesql @query
  21.  
  22.  
  23. END

Ya revisaste lo que regresa la variable @query?? prueba haciendo esto:

Código SQL:
Ver original
  1. print @query

y el resultado que te regrese lo ejecutas :) y ya puedes ver donde esta el problema ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 27/02/2015, 10:23
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

Al cliente, lo que pida...pero seria bueno que te dieras vuelta por aquí:

http://stackoverflow.com/questions/1...ase-using-ssis

Aunque si quieres seguir "viviendo en el pasado", no me hagas caso...
__________________
MCTS Isaias Islas
  #11 (permalink)  
Antiguo 27/02/2015, 10:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

Cita:
Iniciado por iislas Ver Mensaje
Al cliente, lo que pida...pero seria bueno que te dieras vuelta por aquí:

http://stackoverflow.com/questions/1...ase-using-ssis

Aunque si quieres seguir "viviendo en el pasado", no me hagas caso...
just one word, Developers hehehehe
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 27/02/2015, 11:51
 
Fecha de Ingreso: febrero-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

iislas
Gracias por las respuestas lo que sucede es que yo no voy a subir los archivos planos, eso aria alguien desde el aplicativo entonces mi idea es que simplemente seleccione el archivo y listo. Por lo que entiendo de SSIS (que la verdad es muy poco) todo se aria desde la herramienta y esto como tal no seria para un usuario final, no se si estoy en lo correcto ustedes me podrian aclarar.

Libras
Hice el "print @query" y pues me arroja como tal toda la cadena que esta en el parametro al ejecutarla suben los datos a la tabla entonces como tal no creo que sean las instrucciones de la cadena las que generen el error.

jmendezg
Mire los enlaces que me pasaste pero me pasa lo mismo al llegar a ejecutar "sp_executesql" pasa exactamente igual.
  #13 (permalink)  
Antiguo 27/02/2015, 11:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

algo que encontre:

http://stackoverflow.com/questions/1...ith-parameters

usa

Código SQL:
Ver original
  1. EXEC @string

en lugar de sp_executesql
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 27/02/2015, 13:38
 
Fecha de Ingreso: febrero-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

ya lo había intentado pero me dice que no encuentra el procedimiento y pues tiene razón por que no se llama como tal aun procedimiento o no se si lo estoy ejecutando mal.

ALTER PROCEDURE [dbo].[Cargar_Datos]

@Dire NVARCHAR(MAX),
@EmprId uniqueidentifier

as

BEGIN
DECLARE @query Nvarchar(MAX)

SET @query=N'

INSERT INTO Tabla_Datos
with (KEEPIDENTITY)
(
Campo1,
Campo2
)
SELECT a.* FROM OPENROWSET( BULK '+ quotename(@Dire,nchar(39)) +',
FORMATFILE = ''C:\ArchivosFormato\Archivo.fmt'') AS a;'

EXEC @query


end

También utilice algo que vi en una de los enlaces que me envió @jmendezg que es la parte de "BULK '+ quotename(@Dire,nchar(39)) " y funciona igual a como lo tenia.
  #15 (permalink)  
Antiguo 27/02/2015, 14:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[Cargar_Datos]
  2.  
  3. @Dire NVARCHAR(MAX),
  4. @EmprId uniqueidentifier
  5.  
  6. AS
  7.  
  8. BEGIN
  9. DECLARE @query Nvarchar(MAX)
  10.  
  11. SET @query=N'
  12.  
  13. INSERT INTO Tabla_Datos
  14. with (KEEPIDENTITY)
  15. (
  16. Campo1,
  17. Campo2
  18. )
  19. SELECT a.* FROM OPENROWSET( BULK '+ quotename(@Dire,NCHAR(39)) +',
  20. FORMATFILE = ''C:\ArchivosFormato\Archivo.fmt'') AS a;'
  21.  
  22. EXEC (@query)
  23.  
  24. END

prueba con eso
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 27/02/2015, 14:49
 
Fecha de Ingreso: febrero-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Exclamación Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

Si también lo probé así y abre la pestaña de dinamyc-transact y sigue saliendo el error
  #17 (permalink)  
Antiguo 27/02/2015, 14:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

pregunta......ya probaste ejecutar el proceso sin usar el debug de sql server???? el problema es con el debug de sql server no con la ejecucion del proceso........
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #18 (permalink)  
Antiguo 27/02/2015, 15:49
 
Fecha de Ingreso: febrero-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

Si eso probé, ejecuto el proceso mandando los parámetros como se envían desde el aplicativo y bien carga los datos en la tabla pero cuando se hace desde el mismo aplicativo que es simplemente dar clic en un botón y seleccionar el archivo no pasa nada, por eso decidí hacer el tuning para verificar que se llamara al procedimiento enviando los parámetros y si lo hace, tal cual me lo mostraba el tuning lo copie en sql server así lo ejecuto y cargo los datos, entonces me puse hacerle debug y fue cuando encontré el problema que les comento.
  #19 (permalink)  
Antiguo 27/02/2015, 15:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Importar datos de un txt a una tabla de sqlserver 2008

es aqui donde entra el problema, como estas mandando el parametro? el parametro se recibe de manera correcta? tiene algun log de errores tu aplicativo? ya revisaste el log de errores de sql server(para una descripcion mas detallada del error)???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:01.