2013-04-25 81 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 

假定它是文本文件,你并不真的需要由操作系统报告的确切数量,你可以计算包含在你的文本的字节数文件。

希望能给你一些想法。