如何将"exec sp_showpendingchanges"的结果导入表格



EDIT:我在下面尝试的东西直接来自所谓的重复。这些解决方案实际上可以很好地与用户定义的sp(可能还有大多数系统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就可以做到这一点。

以下是的一个工作示例

您创建一个表

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

我读过你的问题,但无法理解创建临时表的问题是什么。无论如何,如果您可以执行SP,但在通过linkedserver或openrowset执行时出现错误,那么问题就出在权限上。

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

我希望它能帮助你。

最新更新