SQLServer將文件下所有的txt內容導入到數據庫表


使用場景: 比如將 C:\Test\ 目錄下的所有 txt文件內容 導入到 Table_1 中

/***** Step 1 開啟 xp_cmdshell 
Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO

*******/

  

--定義臨時表,用於存放獲取的文件名稱
CREATE TABLE #files
    (
      name VARCHAR(200) NULL ,
      sql VARCHAR(7000) NULL
    )
--獲取文件名稱,存放在#files
INSERT  #files
        ( name
        )
        EXEC master..xp_cmdshell 'dir c:\test /b'
--刪除不要的文件名稱
DELETE  #files
WHERE   COALESCE(name, '') NOT LIKE 'Code%' --將 Code改為要刪除的文件名稱

--插入需要  導入文件內容的 命令SQL,需要修改 Table_1(改為導入的Table)和文件路徑

UPDATE  #files
SET     sql = 'BULK INSERT Table_1 FROM ''' + 'C:\Test\' + name + ''' WITH ('
        + 'DATAFILETYPE = ''char'', FIELDTERMINATOR = ''\t'', '
        + 'ROWTERMINATOR = ''\n'')'

--開始執行導入
DECLARE @sql VARCHAR(8000)

DECLARE cur CURSOR STATIC LOCAL
FOR
    SELECT  sql
    FROM    #files

OPEN cur

WHILE 1 = 1 
    BEGIN
        FETCH cur INTO @sql
        IF @@fetch_status <> 0 
            BREAK

        EXEC(@sql)
    END

DEALLOCATE cur

  


主要分為讀取文件夾下所有文件和導入文件內容兩部分
--讀取文件夾下所有文件
declare @files table (ID int IDENTITY, FileName varchar(100))
insert into @files execute xp_cmdshell 'dir c:\test /b'
select 'c:\'+ [FileName] AS FILEPATH INTO #temp from @files
SELECT * FROM #temp

  


--導入文件內容
BULK INSERT dbo.Table_1 
   FROM #temp
   WITH 
      (
         ROWTERMINATOR ='\n'
      )

  



參考:
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/47c8edc1-8cad-4a24-a09a-3fc0c943325c/bulk-insert-multiple-files-tsql


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM