多数のサーバーと、これらすべてのサーバーのインベントリを保持する 1 つのサーバーがあります。
Job Information
新しいジョブが他のサーバーに追加されるたびに、インベントリ サーバーで呼び出されるテーブルを自動的に更新するストアド プロシージャを作成したいと考えています。
Job Information
テーブルには次の列があります。
Server Name, Job Name, Date Created , Date Modified
多数のサーバーと、これらすべてのサーバーのインベントリを保持する 1 つのサーバーがあります。
Job Information
新しいジョブが他のサーバーに追加されるたびに、インベントリ サーバーで呼び出されるテーブルを自動的に更新するストアド プロシージャを作成したいと考えています。
Job Information
テーブルには次の列があります。
Server Name, Job Name, Date Created , Date Modified
まず第一に、各サーバーはインベントリサーバーに到達できます。
ストアドプロシージャを使用して他のサーバーにジョブを追加します。そのプロシージャで、インベントリサーバーにジョブを挿入するための追加の挿入ステートメントを記述します。
INSERT INTO [SERVER].[dbo].[DATABASE].[TABLENAME] (Field1,Field2) VALUES ('Field1', 'Field2');
1 つの方法は、インベントリ サーバーを指す各サーバーにリンク サーバーを作成することです。既に設定済みで、リンク サーバー名は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
には、追加のトリガーを追加できます (または、ロジックを 1 つに組み合わせることができます)。
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