0

我们正在尝试找出订阅何时因桌面堆问题而挂起和过期。我们见过的最好的方法是使用 last_distsync,从运行中获得

 [distribution].sys.sp_replmonitorhelpsubscription @publisher = @mypublisher, @publication_type = 0

然而,因为它有一个 INSERT EXEC,你不能轻易地将它从 SQL 中保存到一个表中——即使这样做也行不通(它可能偶尔会工作,然后你会得到“一个 INSERT EXEC 语句不能嵌套。”) :

DECLARE @sql NVARCHAR(4000), @params NVARCHAR(4000), @mypublisher sysname, @myrefreshpolicy NCHAR(1), @mypublication_type int
SELECT @sql = 'exec [distribution].sys.sp_replmonitorhelpsubscription @publisher = @mypublisher, @publication_type = 0',
@params = N'@mypublisher sysname', @mypublisher = @@servername
INSERT INTO #tmp_subscriptiondata
EXEC sp_executesql @sql, @params, @mypublisher = @mypublisher

缺少(这是我接下来要去的地方)使用 Powershell 脚本和 invoke-sqlcmd2 来编写它,有没有一种纯粹在 SQL 中从该 SP 中获取信息的方法?我正在考虑写一个仿制品,但似乎我达到了我的访问限制,即使是系统管理员(拿了 SP,并把它插入到一个表中,得到了这个)

Msg 2760, Level 16, State 1, Procedure sp_replmonitorhelpsubscription2, Line 1084
The specified schema name "sys" either does not exist or you do not have permission to use it.
4

0 回答 0