SQL Server代理作业调用使用链接服务器的存储过程不起作用

问题描述

我有一个使用链接服务器的存储过程:

  • 已创建指向源数据库服务器的链接服务器,并且安全性是“使用登录名的当前安全上下文进行”
  • 该凭据是使用AD服务帐户创建的
  • 通过选中“操作系统(CmdExec)”创建代理,
  • 存储过程在insert / select命令中使用了链接服务器。当我在SSMS中执行存储过程时,该存储过程运行良好。

但是,当我使用sqlCMD从“ sql Server代理作业”步骤运行存储过程时,它不起作用。

这是我的存储过程的示例:

USE [MyDatabaseName]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[TEST_LINKED_SERVER] 
AS
BEGIN
    INSERT INTO MyDatabaseName.dbo.MyTableName
        SELECT * 
        FROM [linkedservername].sourceDatabaseName.dbo.sourceTableName
END
GO

创建存储过程后,我从SSMS-存储过程中执行了该过程。我做得很好。

MyTableNameSourceTableName插入了数据。

然后我通过两个步骤创建了一个sql Server代理作业:

  • 步骤1:运行存储过程,截断MytableName中的数据
  • 步骤2:运行“ TEST_LINKED_SERVER”存储过程,通过使用链接服务器将链接服务器/数据库/表中的数据插入另一台服务器,将数据更新为Mytablename

步骤2的设置如下:

  • 类型:操作系统(CmdExec)
  • 运行方式:ProxyName
  • 命令:sqlCMD -Q“ EXEC dbo.TEST_LINKED_SERVER”

作业成功完成。但是MytableName没有任何数据。它是空的。数据未插入MyTableName

你有什么主意吗?我需要更新我的sqlCMD吗?又如何?

非常感谢您的帮助。

解决方法

我找到了解决方案并成功了:
SQLCMD -E -S MyServerName -D MyDatabaseName -Q“ EXEC dbo.TEST_LINKED_SERVER”