如何在SQL中获取文件创建日期?

时间:2017-08-20 14:47:48

标签: sql sql-server

使用openrowset,我将XML文件加载到临时表。

如何获取文件创建日期?

CREATE TABLE #T 
(
    IntCol int,
    XmlCol xml
);

INSERT INTO #T (XmlCol)
    SELECT *
    FROM OPENROWSET(BULK 'c:\Test.xml', SINGLE_BLOB) AS x;

SELECT * FROM #t

2 个答案:

答案 0 :(得分:2)

这不是最简洁的方法,但在SQL Server中使用Ole Automation是获取此信息的一种方法。以下示例使用C:\Temp\testfile.txt作为示例。这不是真的“SQL”,不知道这对你来说是否足够好。

DECLARE @hr INT;
DECLARE @dt_created DATETIME;
DECLARE @obj_file INT;
DECLARE @obj_file_system INT;
DECLARE @file_name VARCHAR(100)='C:\Temp\testfile.txt';

-- Create a FileSystemObject. Create this once for all subsequent file manipulation. Don't forget to destroy this object once you're done with file manipulation (cf cleanup)
EXEC @hr = sp_OACreate 'Scripting.FileSystemObject', @obj_file_system OUT;
IF @hr<>0 GOTO __cleanup;

-- Get a handle for the file. Don't forget to release the handle for each file you get a handle for (see cleanup). The return will be different from 0 if the file doesn't exist
EXEC @hr = sp_OAMethod @obj_file_system, 'GetFile', @obj_file out, @file_name;
IF @hr<>0 GOTO __print_created_date;

-- Retrieve the created date.
EXEC sp_OAGetProperty @obj_file, 'DateCreated', @dt_created OUT;

__print_created_date:
SELECT @dt_created AS file_date;

__cleanup:
EXEC sp_OADestroy @obj_file_system;
EXEC sp_OADestroy @obj_file;

Ole Automation需要先启用(只需一次):

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

答案 1 :(得分:1)

T-SQL不是可以访问文件系统的语言。但是,您可以在C#中编写存储过程来完成此任务。您将使用.Net Framework中的相应类读取元数据。您可以使用CLR集成编写自定义函数,以从文件系统中获取所需的所有信息。

这是一个小工作示例,用于在C#中使用CLR集成获取文件创建日期:

public class UserDefinedFunctions
{
    [SqlFunction]
    public static SqlDateTime GetCreatedDate(SqlString filePath)
    {
        return filePath.IsNull ? SqlDateTime.Null : File.GetCreationTime(filePath.Value);
    }
}

然后您必须部署程序集并将其注册到SQL Server,然后使用Create function命令创建正确的函数。

CodeProject Sample

中查看更多内容