从sql server里面读取一个文本文件的大小

时间:2013-04-25 22:56:55

标签: sql sql-server sql-server-2008 tsql

我必须从sql server表中的一些数据创建一个文本文件。我已经为此创建了查询。

创建文件后,我还必须创建一个触发器文件或另一个文本文件,其中包含一些信息,如行数,文件日期,名称等。除此之外,此触发器文件必须具有文件大小信息。< / p>

我想我发现我将创建一个触发器表并继续使用其他信息更新它,例如行数,文件名,日期,因为我在数据收集查询中收集数据。但我很困惑如何从我的查询中获取触发器文件的文件大小。

我很感激任何想法。

2 个答案:

答案 0 :(得分: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默认关闭。 (Msg 15281,Level 16,State 1,Procedure xp_cmdshell,Line 1 SQL Server阻止访问组件“xp_cmdshell”的过程“sys.xp_cmdshell”,因为此组件已作为此服务器的安全配置的一部分关闭。系统管理员可以使用sp_configure启用“xp_cmdshell”。有关启用“xp_cmdshell”的详细信息,请参阅SQL Server联机丛书中的“表面区域配置”。)

  2. 您需要解析输出。

  3. <强> OPENROWSET

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

    假设它是文本文件而您并不真正需要操作系统报告的确切数字,您只需计算文本文件中包含的字节数。

    希望能给你一些想法。

答案 1 :(得分:0)

感谢所有的投入。我最终创建了一个.net可执行文件,它将读取文件大小并为此更新数据库。