Sql-Server
從 RESTORE HEADERONLY 中提取欄位
我正在嘗試使用“ RESTORE HEADERONLY ”來獲取我將要恢復的備份的日期。
命令:
RESTORE HEADERONLY FROM DISK = '<path to .bak file>'
在查詢分析器中執行良好,並提供了一個包含 50 列的結果集。
問題實際上是從程式碼中訪問它。
我可以通過聲明 50:ish 列中的每一列,將其插入臨時表並
exec
從中獲取我想要的值。問題是我真的想避免將整個結果集聲明為臨時表,因為如果他們在未來的版本中向其中添加列,這似乎是一個非常脆弱的解決方案。
有沒有辦法只從這個結果集中得到一列而不聲明所有列?
這對我有用。
SELECT BackupStartDate FROM OPENROWSET('SQLNCLI', 'Server=MARTINPC\MSSQL2008;Trusted_Connection=yes;', 'SET NOCOUNT ON;SET FMTONLY OFF;EXEC('' RESTORE HEADERONLY FROM DISK = ''''C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQL2008\MSSQL\Backup\DB1.bak'''' '')' )
需要啟用臨時分佈式查詢選項。或者,如果您不想這樣做,您可以設置一個環回連結伺服器並改用它。
EXEC sp_addlinkedserver @server = 'LOCALSERVER', @srvproduct = '', @provider = 'SQLOLEDB', @datasrc = @@servername SELECT BackupStartDate FROM OPENQUERY(LOCALSERVER, 'SET FMTONLY OFF; EXEC('' RESTORE HEADERONLY FROM DISK = ''''C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQL2008\MSSQL\Backup\DB1.bak'''' '')')