2010-01-05 16 views
23

Estoy tratando de leer en un archivo de texto de una consulta SQL (SQL Server 2005) pero no estoy teniendo suerte. He intentado varias cosas con EXEC y xp_cmdshell, pero no todas funcionan. Esta es la forma en general he tratado de abordar este:Leyendo un archivo de texto con SQL Server

CREATE TABLE temp (data varchar(2000)); 
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt'; 

entonces trato de seleccionar datos de la tabla temporal. He buscado mucho y no puedo decir qué me estoy equivocando. ¿Ayuda?

Respuesta

31

¿Cómo se ve el archivo de texto? Cada línea un registro?

Vas a tener que revisar la declaración BULK INSERT - que debería ser algo como:

BULK INSERT dbo.YourTableName 
FROM 'D:\directory\YourFileName.csv' 
WITH 
(
    CODEPAGE = '1252', 
    FIELDTERMINATOR = ';', 
    CHECK_CONSTRAINTS 
) 

Aquí, en mi caso, estoy importar un archivo CSV - pero usted debería ser capaz de importar una archivo de texto igual de bien.

De la documentación de MSDN - He aquí una muestra que se espera que trabaja para un archivo de texto con un campo por fila:

BULK INSERT dbo.temp 
    FROM 'c:\temp\file.txt' 
    WITH 
     (
     ROWTERMINATOR ='\n' 
    ) 

parece funcionar muy bien en mi entorno de prueba :-)

+0

Esto funciona bien para mí también. ¡Gracias! –

0

¿Necesita hacer esto una vez, o como parte del funcionamiento normal de la base de datos (es decir, en respuesta a un disparador, evento programado, etc.)?

De cualquier manera, será mejor que cree un paquete de SSIS.

  1. En SQL Management Studio, haga clic con el botón derecho en la base de datos.
  2. Seleccionar tareas | Importar datos ...
  3. Siga las instrucciones del asistente. Seleccione "archivo de texto plano" como el proveedor cuando se le solicite.

No he usado dbo.xp_cmdshell (según su ejemplo), pero imagino que la captura de la salida es el problema.

0

si quiere leer el archivo en una tabla al mismo tiempo, debe usar BULK INSERT. Por otro lado, si prefiere analizar el archivo línea por línea para hacer sus propias comprobaciones, debe echarle un vistazo a esta web: https://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/ Es posible que necesite activar su xp_cmdshell u otras características de Automatización OLE. Simple Google y la secuencia de comandos aparecerá. Espero ser útil.

-2
BULK INSERT dbo.temp 

FROM 'c:\temp\file.txt' --- path file in db server 

WITH 

    (
    ROWTERMINATOR ='\n' 
) 

que funcione para mí, pero guardar como por EditPlus a la codificación ANSI para multilenguaje

Cuestiones relacionadas