1

多数のサーバーと、これらすべてのサーバーのインベントリを保持する 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

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
于 2012-09-21T13:50:59.540 に答える