Sql-Server

將 sp_describe_first_result_set 與還原一起使用時出錯

  • November 15, 2017

sp_describe_first_result_set是否支持使用 system sp 查詢備份元數據?

例如查詢:

SELECT * FROM sys.dm_exec_describe_first_result_set (N'RESTORE HEADERONLY FROM DISK =''C:\SQLBackups\SomeDBbackup.bak''',NULL,0)

為每個欄位返回 NULL。

error_message 欄位:

無法確定元數據,因為語句 RESTORE HEADERONLY …. 不支持元數據發現。

error_type_desc 欄位:

UNSUPPORTED_STATEMENT

有沒有辦法使這個查詢工作?

謝謝

無法確定元數據,因為語句 RESTORE HEADERONLY …. 不支持元數據發現。

錯誤資訊清楚地告訴你這RESTORE HEADERONLY是不支持的語句,它不支持元數據發現。

所以沒有辦法使這項工作。它沒有被實施。

更新

您發布的連結中有一個解決方案,但問題不是如何sp_describe_first_result_set使用不受支持的 smth(這是您的問題),而是如何從RESTORE HEADERONLY結果集中只取回一些列,即如何獲取結果的RESTORE HEADERONLY“可查詢”形式。

有這樣的解決方案:

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''''
'')')

但正如您所見,有問題的伺服器是 2008 年的。

開始SQL Server 2012 sp_describe_first_result_set介紹了,現在如果您嘗試執行上面的查詢,則會執行另一件事(您可以使用 Profiler 看到它):

exec [sys].sp_describe_first_result_set N'SET FMTONLY OFF;
              EXEC(''
              RESTORE HEADERONLY 
              FROM DISK = ''''C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQL2008\MSSQL\Backup\DB1.bak''''
'')',NULL,1

認為OPENQUERY/OPENROWSET總是使用是錯誤的sp_describe_first_result_set,您可以向自己證明它執行簡單的 SELECT 查詢並使用 Profiler 監控執行(即使在 2012 年)。但是在您的特定情況下,查詢已按上述方式進行轉換,您不能對它做任何事情。

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