我正在尝试在每台服务器上找到一份工作,使用以下存储过程。问题是,当我在本地服务器上运行此作业时,它工作正常,当我在远程服务器上运行相同的作业时,我得到一个关于“Merge”语句无法对远程数据库运行的错误。我们正在运行SQL 2008 R2。
MERGE INTO dbo._demo_sp_exec_stats STAT
USING
(SELECT d.object_id, d.database_id,
OBJECT_NAME(object_id, database_id) AS proc_name,
d.last_execution_time
FROM sys.dm_exec_procedure_stats AS d
WHERE d.database_id = DB_ID('_DemoDB') ) AS SRC
ON STAT.object_id = SRC.object_id
WHEN MATCHED
AND STAT.last_execution_time <> SRC.last_execution_time THEN
UPDATE SET
last_execution_time = SRC.last_execution_time
WHEN NOT MATCHED THEN
INSERT (object_id,
database_id,
proc_name,
last_execution_time)
VALUES (SRC.object_id, SRC.database_id,
SRC.proc_name, SRC.last_execution_time) ;
答案 0 :(得分:2)
如果您重新编写代码以便您从远程服务器提取信息并将其插入本地服务器,您将能够绕过merge语句的限制。更改from以包括链接服务器的完全限定名称。这样,它不是在每台服务器上运行语句,而是在中央服务器上运行作业,从远程服务器提取数据并在本地插入数据。