为什么 sp_replmonitorhelpsubscription 在没有参数的情况下不起作用?

Jam*_*ins 2 sql-server transactional-replication sql-server-2017

我刚刚开始使用所有很酷的复制工具来以编程方式监控复制

早期发现之一是sp_replmonitorhelpsubscription

当我运行它时

 sp_replmonitorhelpsubscription
Run Code Online (Sandbox Code Playgroud)

我得到

消息 20587,级别 16,状态 1,过程 sp_replmonitorhelpsubscription,第 77 行 [批处理开始第 16 行]

存储过程“sp_replmonitorhelpsubscription”的“@publication_type”值无效。

根据 MS 文档,它应该是有效的,默认值为空

NULL(默认)

如果我用参数运行它,它工作正常。

sp_replmonitorhelpsubscription  @publication_type = '0' 
Run Code Online (Sandbox Code Playgroud)

我将它与事务复制一起使用,在单个服务器(报告副本)上我已经尝试过,并且在 SQL 2017 和 2016 上得到了相同的结果。我正在针对分发数据库运行它

不确定我是否在做一些愚蠢的事情,如果 MS 文档有误,或者什么。

为什么 sp_replmonitorhelpsubscription 在没有参数的情况下不起作用?

Kin*_*hah 5

检查代码发现:

-- validate @publication_type
    --
    if (@publisher_db is NULL or @publication is NULL) 
        and @publication_type is NULL 
    begin
        raiserror(20587, 16, -1, '@publication_type', 'sp_replmonitorhelpsubscription')
        return (1)
    end
Run Code Online (Sandbox Code Playgroud)

这意味着如果@publication_type为 NULL 那么它会抛出一个预期的错误。

即使在 2014 年,它也会抛出同样的错误。

另外,你只需要运行

sp_replmonitorhelpsubscription @publication_type = 0-- 用于交易发布。因为数据类型是INT.