Sql-Server

從 RESTORE HEADERONLY 中提取欄位

  • July 23, 2021

我正在嘗試使用“ 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''''
'')')

引用自:https://dba.stackexchange.com/questions/12437