如何将“exec sp_showpendingchanges”的结果导入表中

时间:2014-03-04 06:37:17

标签: sql tsql sql-server-2008-r2 replication

编辑:我在下面尝试的内容直接来自所谓的副本。实际上,解决方案可以通过用户定义的sp(可能是大多数系统sp)正常工作,但无论出于何种原因,它都不适用于此。

我可以在发布发布数据库上运行exec sp_showpendingchanges而不会出现任何问题。但是我想在表中捕获结果

我试过了:

SELECT * INTO #tmpTable
FROM OPENROWSET('SQLNCLI', 'Server=SERVER; Trusted_Connection=yes;', 
                'EXEC sp_showpendingchanges')

SELECT * INTO #tmpTable
FROM OPENQUERY(SERVER, 'exec sp_showpendingchanges')

这两个语句都返回一个错误,指出:无效的对象名称'sysmergepublications'。

我试图在连接字符串中指定初始目录,甚至尝试在每个语句的最后一个参数中添加一个USE语句(即我使用了带双引号的嵌入式EXEC语句以及所有这些)。但我仍然遇到同样的错误。

那么如何将exec sp_showpendingchanges的结果导入临时表中,最好不必自己定义表?如果所有其他方法都失败了,我将在C#中创建一个程序,但我真的希望有一种更简单的方法来只用SQL来做这件事。

2 个答案:

答案 0 :(得分:2)

这是一个工作示例

您创建一个表

DECLARE @result_table TABLE
(
  destination_server SYSNAME ,
  pub_name SYSNAME ,
  destination_db_name SYSNAME ,
  is_dest_subscriber BIT ,
  article_name SYSNAME ,
  pending_deletes INT ,
  pending_ins_and_upd INT
)

执行脚本

INSERT  INTO @result_table
        EXEC sp_showpendingchanges 

查看结果

SELECT * FROM @result_table

答案 1 :(得分:0)

我读了你的问题,但是无法理解创建临时表的问题。无论如何,如果你可以执行SP但是当你通过linkedserver或openrowset执行它时会出现错误 - 问题在于权限。

检查sysmergepublications表的权限。如果用于链接服务器或openrowset的用户在grant此表上没有select,则需要将此权限添加到用户。

我希望它会对你有所帮助。