SQL Azure链接服务器RPC

时间:2015-08-21 06:57:19

标签: sql-server sql-server-2008 azure-sql-database rpc linked-server

我在SQL Azure上调用远程存储过程(RPC)时遇到问题,通过链接服务器(在Sql Server 2008 R2实例上构建:10.50.2550.0 - x64 - Enterprise Edition)。

这个问题不难重现,它与“调用”存储过程并没有真正关联,而是与其内部执行(我认为)......

看看我的简单代码:

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的Messages窗口中看到查询结果计数),但第二部分根本没有被调用。

您能否告诉SP sp_reset_connection与哪些内容相关? 你知道一个解决方法来调用我的SP没有错误吗? 我尝试了一切......

正在使用的SQL Azure版本为11.0.9231

1 个答案:

答案 0 :(得分:1)

sp_reset_connection不是实际的存储过程,它是TDS流中的标志,表示"重置连接"所以你可以使用连接池。它应隐式存在于所有SQL Server上,但不能由您的代码调用。

您设置了哪种类型的链接服务器?按照此操作创建到azure的链接服务器:

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