Sql server SQL Server xp\u cmdshell
除了Sql server SQL Server xp\u cmdshell,sql-server,tsql,Sql Server,Tsql,除了 INSERT INTO @backups(filename) EXEC master.sys.xp_cmdshell 'DIR /b c:\some folder with sql backups in it 我正试图从文件夹中获取要还原的SQL备份文件列表,出于明显的安全原因,我不想使用xp\u cmdshell。如果您有权访问备份文件的服务器,可以使用系统表查找您喜欢的备份文件 您将对备份表感兴趣 如果您有权访问备份文件的服务器,则可以使用系统表查找您喜欢的备份文件 您将对备份表
INSERT INTO @backups(filename)
EXEC master.sys.xp_cmdshell 'DIR /b c:\some folder with sql backups in it
我正试图从文件夹中获取要还原的SQL备份文件列表,出于明显的安全原因,我不想使用xp\u cmdshell
。如果您有权访问备份文件的服务器,可以使用系统表查找您喜欢的备份文件
您将对备份表感兴趣 如果您有权访问备份文件的服务器,则可以使用系统表查找您喜欢的备份文件
您将对备份表感兴趣 三个选项,取决于您的环境和需要:
将FILELISTONLY disk='FULL\u路径\u还原到您的\u文件'
。如果文件不存在,则会引发非致命错误。您可以通过测试@error是否为非零来检查T-SQL中的错误李>
根据您的环境和需要,有三种选择:
将FILELISTONLY disk='FULL\u路径\u还原到您的\u文件'
。如果文件不存在,则会引发非致命错误。您可以通过测试@error是否为非零来检查T-SQL中的错误李>
我提出的xp_cmdshell的替代方案如下: 我的情况有点独特,因为我正在尝试一个穷人的原木航运。我有一个文件夹(不是默认的SQL备份位置),其中事务日志是从远程服务器存放的。我正在编写一个c#应用程序,它在该目录中循环并创建一个以逗号分隔的文件名字符串和路径(例如FooA.txn、FooB.txn、FooC.txn)。然后,我将这个字符串输入到我编写的存储过程中,该存储过程解析字符串并将文件名插入临时表中。然后,我循环遍历临时表,按顺序恢复每个事务日志
基本上,C#应用程序取代了xp#u cmdshell,我可以从该应用程序调用存储过程。我提出的xp#u cmdshell的替代方案如下: 我的情况有点独特,因为我正在尝试一个穷人的原木航运。我有一个文件夹(不是默认的SQL备份位置),其中事务日志是从远程服务器存放的。我正在编写一个c#应用程序,它在该目录中循环并创建一个以逗号分隔的文件名字符串和路径(例如FooA.txn、FooB.txn、FooC.txn)。然后,我将这个字符串输入到我编写的存储过程中,该存储过程解析字符串并将文件名插入临时表中。然后,我循环遍历临时表,按顺序恢复每个事务日志
基本上,C#应用程序取代了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;
我知道这个线程已经有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;
这确实是MSDN的问题,但需要一些工作才能从链接中确定1)这些表在MSDB数据库中,2)它们在SQL2008和SQL2005中。这确实是MSDN的问题,但需要一些工作才能从链接中确定1)这些表在MSDB数据库中,2)它们都在SQL2008和SQL2005中。