2014-03-04 65 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,則需要將此權限添加到用戶。

我希望它能幫助你。