sp_procoption 未使用 OPENQUERY 执行存储过程
sp_procoption is not executing stored procedure with OPENQUERY
使用sp_procoption成功执行存储过程"MyBackgroundTask"
sp_procoption @ProcName = 'MyBackgroundTask',
@OptionName = 'startup',
@OptionValue = 'on'
在实习生调用我数据库中的存储过程的主数据库上
use master
CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
/*
.
.
.
*/
execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
END;
这工作正常,除非 MyDatabseStoredProcedure 包含链接服务器上的查询
Insert Into [LOCALTABLE] (id, name)
Select id, name
from OPENQUERY(LINKED_SERVER, 'SELECT * FROM RemoteDB.RemoteTable')
为什么上面的代码行不起作用?
reference
这很简单。在建立与链接服务器的连接之前触发启动程序。因此,您不能在用作启动过程的存储过程中使用链接服务器。
一个建议是生成一个 SQL 服务器代理作业,它将由您的程序生成并有一个小的等待计时器。它会在启动后执行一些 seconds/minutes 并在执行后自行删除。这可能是一个解决方案,但如果您的代理在重启后不会出现,则可能会失败。
使用sp_procoption成功执行存储过程"MyBackgroundTask"
sp_procoption @ProcName = 'MyBackgroundTask',
@OptionName = 'startup',
@OptionValue = 'on'
在实习生调用我数据库中的存储过程的主数据库上
use master
CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
/*
.
.
.
*/
execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
END;
这工作正常,除非 MyDatabseStoredProcedure 包含链接服务器上的查询
Insert Into [LOCALTABLE] (id, name)
Select id, name
from OPENQUERY(LINKED_SERVER, 'SELECT * FROM RemoteDB.RemoteTable')
为什么上面的代码行不起作用?
reference
这很简单。在建立与链接服务器的连接之前触发启动程序。因此,您不能在用作启动过程的存储过程中使用链接服务器。
一个建议是生成一个 SQL 服务器代理作业,它将由您的程序生成并有一个小的等待计时器。它会在启动后执行一些 seconds/minutes 并在执行后自行删除。这可能是一个解决方案,但如果您的代理在重启后不会出现,则可能会失败。