使用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
答案 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命令创建正确的函数。
中查看更多内容