我制作了一个存储过程restoredatabase,它返回代码来恢复数据库。输出脚本如下所示:
restore database [DB] from disk='F:\FULL1.bak' with norecovery
restore database [DB] from disk='F:\DIFF1.bak' with norecovery
restore log [DB] from disk='F:\log1.bak' with norecovery
restore log [DB] from disk='F:\log2.bak' with norecovery
...
restore log [DB] from disk='F:\logN.bak' with norecovery
restore database [DB] with recovery
Run Code Online (Sandbox Code Playgroud)
在整个 SP 中,这些行被添加到一个参数@sql varchar(max)中,该参数最后以 打印print(@sql),如果用户指定了正确的标志,则以exec(@sql). 两者都完美地工作。但是,当像这样使用 sqlcmd 调用 SP 时:
set restoresql=exec restoredatabase @DB='Databasename', @Execute='y'
sqlcmd -h-1 -S SRV\T2 -U sa -P sa -d master -Q "%restoresql%" -o output.txt
Run Code Online (Sandbox Code Playgroud)
输出文件 …
sql-server stored-procedures sql-server-2008-r2 recovery sqlcmd
如何从以下请求中获取请求的全文:
SELECT t.[text]
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
Run Code Online (Sandbox Code Playgroud)
在这里,对于足够长的请求,请求文本会中断。我使用 SSMS 17 和 18 版本。