我可以在发布发布数据库上运行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来做这件事。
答案 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
,则需要将此权限添加到用户。
我希望它会对你有所帮助。