[SQL] 어떻게 T-SQL을 사용하여 텍스트 파일을 읽을 수?
SQL어떻게 T-SQL을 사용하여 텍스트 파일을 읽을 수?
T-SQL을 사용하여 텍스트 파일을 읽을 수있는 가장 좋은 방법은 무엇입니까? 나는 대량 삽입 많은 다른 기능을 본 적이 있지만 비는 내가 무엇을 찾고 있습니다.
나는 텍스트 파일의 각 줄을 읽은 다음 등의 파일 이름, filelocation, 상태, 생성 된 기록 날짜와 시간, 같은 몇 가지 다른 정보가있는 테이블에 삽입 할 필요가
벌크 INSERT 내가이 뭔가를보고 싶어하지 않는 나 추가 필드를 추가 할 수 없습니다.
올바른 방향을 가리키는 어떤 도움이나 정말 감사합니다.
해결법
-
==============================
1.당신은 아마 임시 테이블에 대량 삽입을하고 다음 추가 할 데이터와 결합 다른 삽입 할 수 있습니다. 다음 예는
당신은 아마 임시 테이블에 대량 삽입을하고 다음 추가 할 데이터와 결합 다른 삽입 할 수 있습니다. 다음 예는
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
이것은 당신이하고 싶은 일을하지 않습니다?
-
==============================
2.값의 1 열 테이블을 반환 - I 행에 줄을 전체 파일을 읽고 분리하는 매우 간단한 CLR 절차를 사용합니다. 내가 말했듯이, CLR이 코드는 매우 간단합니다 :
값의 1 열 테이블을 반환 - I 행에 줄을 전체 파일을 읽고 분리하는 매우 간단한 CLR 절차를 사용합니다. 내가 말했듯이, CLR이 코드는 매우 간단합니다 :
[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
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')
이 같은 CLR DLL을 컴파일
c:\windows\microsoft.net\framework\v3.5\vbc.exe /target:library MyFileIO.vb
이 같은 CLR DLL을 등록 :
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
오류가 발생하면, 당신은 DB에서 CLR 지원을 활성화해야 할 수도 있습니다 :
ALTER DATABASE [dbname] SET trustworthy ON go sp_configure 'clr enabled', 1 GO RECONFIGURE GO
당신이 DLL을 변경할 때마다, 당신은 다시 조립 절차 등을 삭제하고 위의 코드를 실행해야 함을 다시 등록합니다.
-
==============================
3.당신은 통합 서비스 (SSIS)를 사용할 수 있습니다
당신은 통합 서비스 (SSIS)를 사용할 수 있습니다
링크 : http://msdn.microsoft.com/en-us/library/ms141026.aspx
링크 : http://technet.microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx
-
==============================
4.OLE 자동화가 SQL 서버에서 사용할 (그리고 큰 많은 사이트가 보안상의 이유로 사용하지 않도록 설정 같은 경우의) 경우, 당신은 통해 sp_OACreate 및 관련 기능을 사용하여 스크립팅 FileSystemObject를의 인스턴스를 만들 수 있습니다.
OLE 자동화가 SQL 서버에서 사용할 (그리고 큰 많은 사이트가 보안상의 이유로 사용하지 않도록 설정 같은 경우의) 경우, 당신은 통해 sp_OACreate 및 관련 기능을 사용하여 스크립팅 FileSystemObject를의 인스턴스를 만들 수 있습니다.
-
==============================
5.이것은 당신이 열을 건너 뛸 수 있습니다 형식 파일을 사용하여 FORMATFILE .When를 사용하여 수행 할 수 있습니다. 형식 파일을 사용하는 많은 장점이있다.
이것은 당신이 열을 건너 뛸 수 있습니다 형식 파일을 사용하여 FORMATFILE .When를 사용하여 수행 할 수 있습니다. 형식 파일을 사용하는 많은 장점이있다.
필드 라인에 라인 쿼리 의지의 대량로드 아래.
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')
위의 질의에 사용 된 형식 파일은 다음과 같습니다
<?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>
from https://stackoverflow.com/questions/12502213/how-to-read-a-text-file-using-t-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 행으로 열을 선택하려면? (0) | 2020.07.13 |
---|---|
[SQL] 오라클은 외래 키를 얻을 수 (0) | 2020.07.13 |
[SQL] - MySQL의의 복잡성 : MyTable에 FROM SELECT COUNT (*); (0) | 2020.07.13 |
[SQL] 데이터베이스에 '#columntable'라는 개체가 이미 있습니다 (0) | 2020.07.13 |
[SQL] WHERE 문에 대해 LIKE 및 IN을 사용하는 것이 가능? (0) | 2020.07.13 |