我在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”(rpc
和rpc out
选项都设置为True
),并且与我使用的其他存储过程和所有其他OPENQUERY代码一起使用,直到现在:权限也正常。
奇怪的是,SP的第一部分正确执行(我在SSMS的Messages窗口中看到查询结果计数),但第二部分根本没有被调用。
您能否告诉SP sp_reset_connection
与哪些内容相关?
你知道一个解决方法来调用我的SP没有错误吗?
我尝试了一切......
正在使用的SQL Azure版本为11.0.9231
答案 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