使用OPENROWSET执行sys.xp_readerrorlog

时间:2013-03-04 15:25:50

标签: sql tsql permissions sql-server-2008-r2 openrowset

以下成功运行:

EXEC sys.xp_readerrorlog 0

然而,这不是:

SELECT * 
FROM OPENROWSET(
    'SQLNCLI', 
    'Server=.;Trusted_Connection=Yes;',
    'EXEC sys.xp_readerrorlog 0')

我使用我的Windows帐户登录,并且对本地服务器上的所有数据库(包括系统数据库)拥有sysadmin权限。

以下是错误消息:

  

Msg 7357,Level 16,State 2,Line 11
  无法处理对象“EXEC sys.xp_readerrorlog 0”。 OLE DB提供程序“SQLNCLI10”用于链接   server“(null)”表示该对象没有列或者没有   当前用户没有该对象的权限。

我已经检查了 C:\Windows\ServiceProfiles\LocalService\AppData 上的文件夹权限,以防OPENROWSET创建临时文件但本地管理员(我在小组)完全控制。

为什么我会收到此错误以及如何解决此问题?

1 个答案:

答案 0 :(得分:3)

试试这个:

SELECT * 
FROM OPENROWSET(
    'SQLNCLI', 
    'Server=.;Trusted_Connection=Yes;',
    'SET FMTONLY OFF;EXEC sys.xp_readerrorlog 0')

基本上,它试图在运行程序之前推断结果的形状。

  

使用该set选项意味着可行的唯一方法是执行该过程。