是否支持使用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字段:
无法确定元数据,因为语句还原HEADERONLY。不支持元数据发现。
error_type_desc字段:
UNSUPPORTED_STATEMENT
有办法使这个查询工作吗?
谢谢
发布于 2017-11-15 08:37:02
无法确定元数据,因为语句还原HEADERONLY。不支持元数据发现。
错误消息清楚地告诉您,RESTORE HEADERONLY
是不受支持的语句,它不支持元数据发现。
所以没有办法让这件事成功。它没有得到执行。
在您发布的链接中有一个解决方案,但问题不在于如何使用不支持的smth (即您的问题)使work sp_describe_first_result_set
,而是如何从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
是错误的,您可以向自己证明使用Profiler执行简单的SELECT查询和监视执行(甚至在2012年)。但是,在您的特定情况下,查询会像上面所描述的那样进行转换,您不能对它做任何事情。
https://dba.stackexchange.com/questions/190954
复制相似问题