1

我有一堆服务器和一个服务器来保存所有这些服务器的库存。

我想创建一个存储过程Job Information,每当将新作业添加到任何其他服务器时,它将自动更新在我的库存服务器中调用的表。

Job Information表具有以下列:

Server Name, Job Name, Date Created , Date Modified
4

2 回答 2

0

首先,您的每个服务器都可以访问您的库存服务器。

使用存储过程将您的作业添加到您的其他服务器。在该过程中,为您的库存服务器的插入作业编写一个额外的插入语句。

INSERT INTO [SERVER].[dbo].[DATABASE].[TABLENAME] (Field1,Field2) VALUES ('Field1', 'Field2');
于 2012-09-21T13:50:10.503 回答
0

一种方法是在指向您的库存服务器的每台服务器上创建一个链接服务器。我假设您已经设置了它并且链接服务器名称是InventoryServer.

然后你可以在每台服务器上创建一个触发器:

USE msdb;
GO
CREATE TRIGGER dbo.UpdateNewJob
ON dbo.sysjobs
FOR INSERT
AS
BEGIN
  SET NOCOUNT ON;

  INSERT InventoryServer.DatabaseName.dbo.[Job Information]
    ([Server Name],[Job Name],[Date Created],[Date Modified])
    SELECT @@SERVERNAME, name, date_created, date_modified
      FROM inserted;
END
GO

要更新该Date Modified列,您可以添加一个额外的触发器(或者您可以将逻辑组合成一个):

USE msdb;
GO
CREATE TRIGGER dbo.UpdateExistingJob
ON dbo.sysjobs
FOR UPDATE
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE j
    SET [Date Modified] = i.date_modified
    FROM  InventoryServer.DatabaseName.dbo.[Job Information] AS j
    INNER JOIN inserted AS i
    ON i.name = j.name
    WHERE j.[Server Name] = @@SERVERNAME;
END
GO

InventoryServer现在您还需要在此错误处理之上添加 - 例如,当无法访问时您想做什么?如果工作名称更改了怎么办?job_id(除了名称之外,您的中央库存表可能还应该包含 。)

顺便说一句,请尽量避免使用空格或其他特殊字符命名表和列 - 这只会迫使您[square brackets]在大多数地方使用。你觉得哪个可读性最高/最不可读?说实话:

[Date Modified]

DateModified

Date_Modified
于 2012-09-21T13:50:59.540 回答