2014-03-04 98 views
1

编辑:我试过下面的东西直接来自所谓的重复。解决方案实际上可以在用户定义的sp(也可能是大多数系统sp)上正常工作,但无论出于何种原因,它都不适用于此。如何从“exec sp_showpendingchanges”获得结果到表中

我可以在分布发布数据库上运行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来完成。

+1

[How to SELECT \ * INTO \ [temp table \] FROM \ [存储过程]]的可能重复(http://stackoverflow.com/questions/653714/how-to-select-into-temp-从存储过程) – MikkaRin

+0

@MikkaRin我有点失望,你标记这是一个重复如此之快,没有阅读您链接的帖子和我已经尝试过的解决方案。如果你有,很明显,我试过的东西可能直接来自那个帖子。 ;) – BVernon

回答

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 
+0

谢谢安德拉斯。我知道我可以这样做,但我希望避免必须申报表格。尽管如此,我不认为会有更好的解决方案。 – BVernon

+0

我可能会标记这个答案,但我真的很想看看是否有人能够回答我为什么首先得到错误。 – BVernon

+0

对不起BVernon,这是一个我知道的解决方案。 – Andras

0

我看了你的问题,但肯定CA不明白什么问题来创建临时表。无论如何,如果您可以执行SP,但是通过链接服务器或openrowset执行时发生错误 - 问题在于权限。

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

我希望它能帮助你。