Sql server sp_procoption未使用OPENQUERY执行存储过程
使用sp_procoption,它成功执行存储过程“MyBackgroundTask” 在主数据库上,哪个实习生调用我数据库中的存储过程Sql server sp_procoption未使用OPENQUERY执行存储过程,sql-server,stored-procedures,openquery,Sql Server,Stored Procedures,Openquery,使用sp_procoption,它成功执行存储过程“MyBackgroundTask” 在主数据库上,哪个实习生调用我数据库中的存储过程 use master CREATE PROCEDURE MyBackgroundTask AS BEGIN /* . . . */ execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure]; END
use master
CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
/*
.
.
.
*/
execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
END;
除非MyDatabaseStoredProcedure包含链接服务器上的查询,否则此操作正常
Insert Into [LOCALTABLE] (id, name)
Select id, name
from OPENQUERY(LINKED_SERVER, 'SELECT * FROM RemoteDB.RemoteTable')
为什么上面的代码行不起作用
这很简单。启动过程在与链接服务器建立连接之前触发。因此,不能在用作启动过程的存储过程中使用链接服务器 一个建议是生成一个SQL Server代理作业,该作业将由您的过程生成,并且有一个小的等待计时器。它将在启动后几秒/分钟执行,并在执行后自行删除。这可能是一个解决方案,但如果您的代理在重新启动后无法启动,则可能会失败
Insert Into [LOCALTABLE] (id, name)
Select id, name
from OPENQUERY(LINKED_SERVER, 'SELECT * FROM RemoteDB.RemoteTable')