tabla - Leyendo un archivo de texto con SQL Server
sql server read file to variable (5)
Estoy intentando leer un archivo de texto de una consulta SQL (SQL Server 2005) pero no estoy teniendo ninguna suerte. He probado varias cosas con EXEC y xp_cmdshell, pero no están funcionando. Esta es la forma general en que he tratado de abordar esto:
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 lo que me estoy equivocando. ¿Ayuda?
¿Cómo se ve tu archivo de texto? Cada línea un registro?
Tendrás que revisar la declaración BULK INSERT , que debería tener el siguiente aspecto:
BULK INSERT dbo.YourTableName
FROM ''D:/directory/YourFileName.csv''
WITH
(
CODEPAGE = ''1252'',
FIELDTERMINATOR = '';'',
CHECK_CONSTRAINTS
)
Aquí, en mi caso, estoy importando un archivo CSV, pero también debería poder importar un archivo de texto.
De los documentos de MSDN: aquí hay una muestra que, con suerte, funciona para un archivo de texto con un campo por fila:
BULK INSERT dbo.temp
FROM ''c:/temp/file.txt''
WITH
(
ROWTERMINATOR =''/n''
)
Parece funcionar bien en mi entorno de prueba :-)
¿Necesita hacerlo una vez, o como parte de la operación normal de la base de datos (es decir, en respuesta a un desencadenante, un evento programado, etc.)?
De cualquier manera, es mejor crear un paquete SSIS.
- En SQL Management Studio, haga clic derecho en la base de datos.
- Seleccionar tareas | Importar datos ...
- 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 tu ejemplo), pero me imagino que capturar la salida es el problema.
Acabo de descubrir esto:
SELECT * FROM OPENROWSET(BULK N''<PATH_TO_FILE>'', SINGLE_CLOB) AS Contents
Se extraerá el contenido del archivo como varchar (max). Reemplace SINGLE_CLOB
con:
SINGLE_NCLOB
para nvarchar (max) SINGLE_BLOB
para varbinary (max)
Gracias a http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/ por esto!
Si desea leer el archivo en una tabla a la vez, debe usar BULK INSERT. Por otro lado, si prefiere analizar el archivo línea por línea para realizar sus propias comprobaciones, debe consultar 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 funciones de automatización OLE. Simple Google y el script aparecerá. Espero ser útil.
BULK INSERT dbo.temp
FROM ''c:/temp/file.txt'' --- path file in db server
WITH
(
ROWTERMINATOR =''/n''
)
Funciona para mí, pero guarda como editplus para codificar ansi en varios idiomas.