[英]SQL Server xp_cmdshell
除了T-SQL
以外,還有其他方法可以獲取文件名列表嗎?
INSERT INTO @backups(filename)
EXEC master.sys.xp_cmdshell 'DIR /b c:\some folder with sql backups in it
我試圖從要還原的文件夾中獲取SQL備份文件的列表,出於明顯的安全原因,我不想使用xp_cmdshell
。
我確實意識到該線程已有5年歷史了,但我想我會發布另一個非xpCmdShell,非CLR替代方案。 詳細信息在下面的代碼中,它很簡單。
--===== Define the path and populate it.
-- This could be a parameter in a proc
DECLARE @pPath VARCHAR(512);
SELECT @pPath = 'C:\Temp';
--===== Create a table to store the directory information in
CREATE TABLE #DIR
(
RowNum INT IDENTITY(1,1),
ObjectName VARCHAR(512),
Depth TINYINT,
IsFile BIT,
Extension AS RIGHT(ObjectName,CHARINDEX('.',REVERSE(ObjectName))) PERSISTED
)
;
--===== Get the directory information and remember it
INSERT INTO #DIR
(ObjectName,Depth,IsFile)
EXEC xp_DirTree 'C:\Temp',1,1
;
--===== Now do whatever it is you need to do with it
SELECT * FROM #DIR;
三種選擇,取決於您的環境和需求:
RESTORE FILELISTONLY disk='FULL_PATH_TO_YOUR_FILE'
。 如果文件不存在,則會引發非致命錯誤。 您可以通過測試@@ error是否為非零來檢查T-SQL中的錯誤。 我提出的xp_cmdshell的替代方法如下:
我的情況有點特殊,因為我正在嘗試運送一個窮人的原木。 我有一個文件夾(不是默認的SQL備份位置),該文件是從遠程服務器存放事務日志的。 我正在寫一個ac#應用程序,該應用程序循環訪問該目錄並創建一個用逗號分隔的帶有路徑的文件名字符串(例如FooA.txn,FooB.txn,FooC.txn)。 然后,我將此字符串輸入到我編寫的存儲過程中,該過程將解析該字符串並將文件名插入到臨時表中。 然后,我遍歷臨時表,依次恢復每個事務日志。
基本上,C#應用程序替換了xp_cmdshell,並且可以從該應用程序調用存儲過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.