我有一堆服务器和一个服务器来保存所有这些服务器的库存。
我想创建一个存储过程Job Information
,每当将新作业添加到任何其他服务器时,它将自动更新在我的库存服务器中调用的表。
该Job Information
表具有以下列:
Server Name, Job Name, Date Created , Date Modified
我有一堆服务器和一个服务器来保存所有这些服务器的库存。
我想创建一个存储过程Job Information
,每当将新作业添加到任何其他服务器时,它将自动更新在我的库存服务器中调用的表。
该Job Information
表具有以下列:
Server Name, Job Name, Date Created , Date Modified
首先,您的每个服务器都可以访问您的库存服务器。
使用存储过程将您的作业添加到您的其他服务器。在该过程中,为您的库存服务器的插入作业编写一个额外的插入语句。
INSERT INTO [SERVER].[dbo].[DATABASE].[TABLENAME] (Field1,Field2) VALUES ('Field1', 'Field2');
一种方法是在指向您的库存服务器的每台服务器上创建一个链接服务器。我假设您已经设置了它并且链接服务器名称是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