他们是否可以通过除
之外的T-SQL获取文件名列表INSERT INTO @backups(文件名) EXEC master.sys.xp_cmdshell'DIR / b c:\某些带有sql备份的文件夹
我正在尝试从要恢复的文件夹中获取sql备份文件列表,出于明显的安全原因,我不想使用xp_cmdshell。
答案 0 :(得分:1)
如果您可以访问备份文件的服务器,则可以使用系统表查找您喜欢的备份文件。
http://msdn.microsoft.com/en-us/library/ms188062.aspx
您会对备份表感兴趣。
答案 1 :(得分:1)
三种选择,具体取决于您的环境和需求:
RESTORE FILELISTONLY disk='FULL_PATH_TO_YOUR_FILE'
。如果文件不存在,则会引发非致命错误。您可以通过测试@@ error是否为非零来检查T-SQL中的错误。 答案 2 :(得分:1)
我确实知道这个帖子已经有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;
答案 3 :(得分:0)
xp_cmdshell的替代方法我出现在下面:
我的情况有点独特,因为我正在尝试一个穷人的原木运输。我有一个文件夹(不是默认的SQL备份位置),其中从远程服务器存放事务日志。我正在编写一个循环遍历该目录的c#app,并使用路径创建逗号分隔的文件名字符串(例如FooA.txn,FooB.txn,FooC.txn)。然后我将此字符串提供给我编写的存储过程,该存储过程解析字符串并将文件名插入临时表。然后我循环遍历临时表,按顺序恢复每个事务日志。
基本上C#应用程序取代了xp_cmdshell,我可以从应用程序中调用存储过程。