0

在我的SQL Azure上調用遠程存儲過程(RPC)時,通過鏈接服務器(基於Sql Server 2008 R2實例構建:10.50.2550.0 - x64 - Enterprise版)。SQL Azure鏈接服務器中的sp_reset_connection錯誤RPC

這個問題並不難再現,而這不是真的「呼籲」的存儲過程,但其內部執行(我認爲)相關...

看看我的簡單的代碼:

CREATE PROCEDURE [dbo].[myStoredProcedure] 
    @AccountId INT = NULL 
AS 
BEGIN 
    DELETE FROM [dbo].[myTable]; 

    INSERT INTO [dbo].[myTable] (Col1, Col2) 
     SELECT DISTINCT 
      Value1 
      , Value2 
     FROM [dbo].[myTableSource]; 
END 
GO 

GRANT EXECUTE ON [dbo].[myStoredProcedure] TO [myDbRole] 
GO 

當我啓動這個通過我的鏈接服務器,使用此代碼(從我的本地實例,這裏的鏈接服務器已經建立的連接上)...

EXEC('[AZURE_LINKEDSERVER].[myDatabase].[dbo].[myStoredProcedure] @AccountId = NULL') 

......我得到這個錯誤(這似乎警告!):

Message 2812, level 16, state 62, row 1 
Could not find stored procedure 'sp_reset_connection'. 

而且很明顯,我到處檢查,我沒有要求該存儲過程......我認爲這是在內部使用由SQL Server。

我也試過這個代碼,相同的結果:

EXEC sp_sqlexec '[AZURE_LINKEDSERVER].[myDatabase].[dbo].[myStoredProcedure] NULL' 

鏈接的服務器已經「遠程RPC啓用」(rpcrpc out選項均設置爲True),並與其他存儲過程和所有其他的偉大工程直到現在我使用的OPENQUERY代碼:還有權限正常工作。

奇怪的是SP的第一部分正確執行(我在SSMS的消息窗口中看到了查詢結果計數),但第二部分根本不被調用。

請問您可以告訴SP sp_reset_connection與哪些有關? 你知道一個解決方法來調用我的SP沒有錯誤嗎? 我什麼都試過......

SQL Azure在使用具有版本11.0.9231

回答

1

sp_reset_connection的是不是一個實際的存儲過程,它是TDS流中的標誌,上面寫着「重置連接」這樣你就可以使用連接池。它應該隱含在所有SQL Server上,但不能由您的代碼調用。

你安裝了什麼類型的鏈接服務器?按照這個來創建鏈接服務器天青:

http://blogs.msdn.com/b/sqlcat/archive/2011/03/08/linked-servers-to-sql-azure.aspx

+0

謝謝你的回答:鏈接的服務器已正確創建... ...每一個即席查詢工作正常,也單行SP的工作!每個鏈接服務器選項設置正確(我檢查你的鏈接)...你知道一種方法來禁用sp_reset_connection「標誌」?爲什麼通過這種方式通過Sql Server連接調用? – MAXE

+0

不,它在協議級完成 - 如果你通過ssms撥打電話,它是否工作?它確實聽起來像某人已經打電話給sp_reset_connection,因爲我從來沒有看到它像這樣失敗 - 請仔細檢查所有代碼,因爲它已部署到SQL(實際上選擇修改它而不是查看源代碼),並確保它不在任何地方 –

+0

不,根本沒有任何呼叫:您可以嘗試使用我的代碼......也可以使用SSMS,它不會啓動! – MAXE