txt tabla para masiva leer importar importación exportar exportación ejemplos desde datos carga asistente archivo sql tsql

tabla - ¿Cómo leer un archivo de texto usando T-SQL?



importar txt a sql server 2012 (5)

Probablemente podría hacer una inserción masiva en una tabla temporal y luego hacer otra inserción uniéndose con los datos que desea agregar. Aquí hay un ejemplo

CREATE TABLE #TEXTFILE_1( FIELD1 varchar(100) , FIELD2 varchar(100) , FIELD3 varchar(100) , FIELD4 varchar(100)); BULK INSERT #TEXTFILE_1 FROM ''C:/STUFF.TXT'' WITH (FIELDTERMINATOR ='' | '',ROWTERMINATOR ='' /n'') /*You now have your bulk data*/ insert into yourtable (field1, field2, field3, field4, field5, field6) select txt.FIELD1, txt.FIELD2, txt.FIELD3, txt.FIELD4, ''something else1'', ''something else2'' from #TEXTFILE_1 txt drop table #TEXTFILE_1

¿Esto no hace lo que te gustaría?

¿Cuál es la mejor manera de leer un archivo de texto usando T-SQL? He visto BULK INSERT y muchas funciones diferentes, pero ninguna de ellas es lo que estoy buscando.

Necesito leer cada línea en el archivo de texto y luego insertarlo en una tabla con otra información como el nombre de archivo, ubicación de archivo, estado, fecha y hora de grabación creada, etc.

BULK INSERT no me permite agregar campo adicional a menos que me falta algo sobre esto.

Cualquier ayuda o señalando la dirección correcta será realmente apreciada.



Si la automatización OLE está habilitada en SQL Server (y es una gran cantidad de sitios si la desactivan por razones de seguridad), puede crear una instancia de Scripting FileSystemObject utilizando sp_OACreate y las funciones relacionadas.


Utilizo un procedimiento CLR muy simple que lee todo el archivo y separa las líneas en filas, devolviendo una tabla de valores de una columna. Como dije, el código CLR es muy simple:

[MyFileIO.vb] Imports System Imports System.IO Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlTypes Imports Microsoft.SqlServer.Server Imports System.Collections Imports System.Runtime.InteropServices Partial Public Class TextFiles <Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName:="GetNextSplitString")> _ Public Shared Function FileToTable(ByVal FileName As String) As IEnumerable Dim s() As String Using sr As New StreamReader(FileName) s = Split(sr.ReadToEnd, vbCrLf) End Using Return s End Function Public Shared Sub GetNextSplitString(ByVal Value As Object, <Out()> ByRef Data As SqlChars) Data = New SqlChars(CType(Value, String)) End Sub End Class

Ejemplos

select *, getdate() as [CreateDate], 1 as [AnotherColumn], ''xyz'' as [ETC] from dbo.FileToTable(''c:/file.ext'') select line, left(line, 10), right(line, 10) from dbo.FileToTable(''c:/file.ext'') select ... into [tablename] from dbo.FileToTable(''c:/file.ext'')

Más detalles

Compile la CLR DLL de esta manera:

c:/windows/microsoft.net/framework/v3.5/vbc.exe /target:library MyFileIO.vb

Registre la CLR DLL así:

create assembly MyFileIO from ''c:/MyFileIO.dll'' with permission_set = unsafe go create function dbo.FileToTable (@FileName nvarchar(255)) returns table (line nvarchar(max)) as external name MyFileIO.TextFiles.FileToTable go

Si obtiene un error, es posible que necesite habilitar el soporte de CLR en el archivo db:

ALTER DATABASE [dbname] SET trustworthy ON go sp_configure ''clr enabled'', 1 GO RECONFIGURE GO

Siempre que cambie la DLL, debe abandonar el procedimiento y el ensamblaje, y ejecutar nuevamente el código desde arriba para volver a registrarlo.


Esto se puede hacer usando FORMATFILE . Al usar el archivo de formato, puede omitir las columnas. hay muchas más ventajas de usar archivos de formato.

Debajo de la consulta se cargarán las líneas en el campo Line .

CREATE TABLE TextFile ( [Line] varchar(500) , [FileName] varchar(100) , [RecordDate] DATETIME DEFAULT GETDATE(), [RecordID] INT IDENTITY(1,1) , ) BULK INSERT TextFile FROM ''C:/FILE.TXT'' WITH (FORMATFILE = ''C:/FILEFORMAT.XML'')

El archivo de formato utilizado en la consulta anterior es:

<?xml version="1.0"?> <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RECORD> <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="/r/n" MAX_LENGTH="500" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> </RECORD> <ROW> <COLUMN SOURCE="1" NAME="Line" xsi:type="SQLVARYCHAR"/> </ROW> </BCPFORMAT>