使用openrowset,我將XML文件加載到臨時表。如何獲取文件在SQL中創建日期?
如何獲取文件創建日期?
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
使用openrowset,我將XML文件加載到臨時表。如何獲取文件在SQL中創建日期?
如何獲取文件創建日期?
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
T-SQL不是您可以訪問文件系統的語言。但是,您可以在C#中編寫存儲過程來完成此任務。您可以使用.Net Framework中的相應類讀取元數據。您可以使用CLR集成編寫自定義函數,從文件系統獲取所需的每個信息。
這裏是一個小的工作樣本,以得到一個文件的創建日期與CLR集成在C#:
public class UserDefinedFunctions
{
[SqlFunction]
public static SqlDateTime GetCreatedDate(SqlString filePath)
{
return filePath.IsNull ? SqlDateTime.Null : File.GetCreationTime(filePath.Value);
}
}
那麼你已經有了部署大會,並將其註冊到SQL Server,然後創建適當的功能與創建功能命令。
得到詳細信息謝謝。我們能夠從SQL獲取所有細節。但是,只有缺失部分是文件創建日期。我可以通過master.XP_CMDShell獲得 - 我們沒有使用內置sp ..出於安全原因 – goofyui
@goofyui不能使用CLR嗎? –
不是最簡潔的方式來做到這一點,但在SQL Server中使用OLE自動化是獲得此信息的一種方式。以下示例使用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自動化需要,但(僅一次)啓用第一:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
您可能會發現更容易將文件的創建日期添加到XML文件作爲創建過程的一部分! –
我們從第三方獲取xml文件..以feed的形式進入。 – goofyui
我會用另一種語言來讀取所有的文件信息,但是如果你必須堅持SQL,你可能想看看[這裏](https://www.sqlservercentral.com/Forums/Topic494395-149-1.aspx) –