2013-04-25 82 views
0

我必須從sql server表中的一些數據創建一個文本文件。我已經爲此創建了查詢。從sql server裏面讀取文本文件的大小

一旦文件被創建,我也必須創建一個觸發文件或只是另一個文本文件,如行數,文件日期,名稱等信息。除了這些觸發文件必須有文件大小信息。

我想我會發現我將創建一個觸發器表並隨着其他信息(如行數,文件名,日期)繼續更新,因爲我在數據收集查詢中收集數據。但我很困惑如何從我的查詢中獲取觸發器文件的文件大小。

我會很感激任何想法。

+2

使用TSQL處理數據庫之外的文件或其他任何東西通常很困難,因爲它是一種數據操縱語言,而不是通用編程語言。我建議你考慮編寫一個外部腳本或應用程序來管理這些文件,並用文件大小數據更新數據庫,它幾乎肯定比使用TSQL更容易。 – Pondlife 2013-04-26 13:35:32

回答

0

感謝您的所有投入。我最終創建了一個.net可執行文件,它將讀取文件大小並更新數據庫。

1

我個人會使用Powershell來執行需要與Windows交互的任務,但它不是很有趣。

有兩個基於SQL的解決方案,我能想到的:

的xp_cmdshell

exec xp_cmdshell 'dir c:\temp\test.txt' 

    Output 
    Volume in drive C is System 
    Volume Serial Number is A227-BF7F 
    NULL 
    Directory of c:\temp 
    NULL 
    26/04/2013 10:52 AM    20 test.txt 
       1 File(s)    20 bytes 
       0 Dir(s) 214,210,105,344 bytes free 
    NULL 

有一些缺點,但:

  1. xp_cmdshell的默認情況下關閉。 (消息15281,級別16,狀態1,過程xp_cmdshell,行1 SQL Server阻止訪問組件'xp_cmdshell'的過程'sys.xp_cmdshell',因爲此組件作爲此服務器的安全配置的一部分被關閉。管理員可以使用sp_configure啓用'xp_cmdshell'。有關啓用'xp_cmdshell'的詳細信息,請參閱SQL Server聯機叢書中的「表面區域配置」。)

  2. 您需要解析輸出。

OPENROWSET

select datalength(bulkcolumn) from openrowset(bulk 'c:\temp\test.txt', single_clob) a 

假定它是文本文件,你並不真的需要由操作系統報告的確切數量,你可以計算包含在你的文本的字節數文件。

希望能給你一些想法。