Web design and hosting, database, cloud and social media solutions that deliver business results
  • ビジネスソリューション
    • データベースサービス
      • サーバーのアップグレードと DBA サービス
      • データウェアハウス サービス
      • データ統合
      • パワーBI
    • ウェブサイトデザイン
      • Web サイトのセキュリティ
      • Web サイトの最適化
      • ロゴデザイン
      • 支払いゲートウェイ
      • テクニカルツール
    • ビジネスサービス
      • Google クラウド サービス
      • アマゾン ウェブ サービス
      • マイクロソフト アズール
    • ソーシャルメディア
    • マイクロソフトオフィス
  • 学校
    • テスト環境
    • 学習データベース
      • 基礎
      • SQL Serverデータ
      • SQLServerのメンテナンス
      • SQL Serverの日付の使用
      • SQLServerピボットの使用-ピボット解除
      • SQLServer関数の使用
      • オープンクエリを取得
      • ツール
    • ウェブデザインを学ぶ
      • Ousia コンテンツ管理システムの構築
      • ASP-NET の使用
      • CSS の使用
      • JavaScript の使用
    • クラウドと IT サービスの学習
      • タスク スケジューラ エラー 2147943645
      • OpenSSL での SSL の要求と PFX ファイルの生成の簡単な手順
    • ソーシャル メディアの使用
      • Facebookアカウントを個人用からビジネス用に変更する
      • Google レビューを依頼する
      • ソーシャル メディアの取り組みをどこに集中させるかを選択する
      • ソーシャル メディアの画像サイズ
      • メタ データを使用してソーシャル メディア画像を設定する
  • 私たちに関しては
    • ブログ
      • Google コア アップデート 2020 年 1 月
      • インターネット上のウェブサイトに関する最も厄介なこと
      • ウェブサイトの広告リーフレットのコンテンツを選択する方法
      • エントリーレベルのゲーム機の構築
      • オンライン詐欺の防止
      • ギグエコノミーのスキマー
      • ホットチリインターネット閉鎖
      • 無料のベクター グラフィックスのトップ 5 Web サイト
    • キャリア
      • 翻訳者 英日
      • 英語-トルコ語翻訳者
    • チーム
      • アイセ・ハー
      • アリ アル アミン
      • ギャビン・クレイトン
      • サイガングー
      • スーリヤ・ムッカマラ
      • スニール・クマール
      • チェスターコッパーポット
    • ポートフォリオ
عربى (AR)čeština (CS)Deutsch (DE)English (EN-GB)English (EN-US)Español (ES)فارسی (FA)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

トリガーを使用したクロスデータベース内のデータの監査と同期

トリガーを作成することで構造がわずかに異なる可能性がある、異なるデータベースのテーブルの監査と同期

About

This is a very stripped down version of some code that we set up at a previous client site. They had two very different databases on different servers (customer and dialler) that needed to have certain data syncronised in real time.

There were a couple of ways of doing it, replication, or stored procedures linked to a job or triggers, in their example it had to be a job, because we didn't own the source code for one of the databases, however my preferred method would be using triggers with something like this...

SQL

CREATE TABLE Customer(
CustomerID INT IDENTITY(1,1) CONSTRAINT PK_CustomerID PRIMARY KEY,
CustomerName NVARCHAR(100),
CustomerStatus INT
--,Other Customer Data...
)
CREATE TABLE CustomerAudit(
CustomerAuditID INT IDENTITY(1,1) CONSTRAINT PK_CustomerAuditID PRIMARY KEY,
CustomerAuditType NVARCHAR(100),
CustomerAuditDate DATETIME DEFAULT GETDATE(),
CustomerID INT,
CustomerName NVARCHAR(100),
CustomerStatus INT
)     
CREATE TABLE Dialler(
CustomerID INT CONSTRAINT PK_DiallerCustomerID PRIMARY KEY,
CustomerStatus INT,
CustomerName NVARCHAR(100),
DiallerStatus INT--Other Dialler Records
)
GO

So now we have created some very basic tables that can store customer data. Next we will create some Stored Procedures to handle updating records on the dialler side.

The reason I have done this as stored procedures is to keep the volume of data down (i don't want server 1 sending database records to server 2), it is in effect pinching what would normally be done in a web environment.

SQL

CREATE PROC DiallerUpdate(@CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT) AS BEGIN
UPDATE Dialler SET CustomerStatus=@CustomerStatus,CustomerName=@CustomerName
WHERE CustomerID=@CustomerID
END
GO
CREATE PROC DiallerInsert(@CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT) AS BEGIN
INSERT INTO Dialler(CustomerID,CustomerName,CustomerStatus,DiallerStatus)
SELECT @CustomerID,@CustomerName,@CustomerStatus,0
END
GO
CREATE PROC DiallerDelete(@CustomerID INT) AS BEGIN
DELETE FROM Dialler
WHERE CustomerID=@CustomerID
END
GO

Now we have created these, we can move onto creating a trigger that will handle sending the data and as we are doing it, we can also auditing our records.

SQL

CREATE TRIGGER CustomerInsert ON Customer AFTER INSERT
AS BEGIN
DECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT
--Get Record Details
SELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM inserted
--Add to Audit
INSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)
SELECT 'Record Created',@CustomerID,@CustomerName,@CustomerStatus
--Call Insert Procedure
EXEC dbo.DiallerInsert@CustomerID,@CustomerName,@CustomerStatus
END
GO
CREATE TRIGGER CustomerUpdate ON Customer AFTER Update
AS BEGIN
DECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT
--Get Record Details
SELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM inserted
--Add to Audit
INSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)
SELECT 'Record Updated',@CustomerID,@CustomerName,@CustomerStatus
--Call Update Procedure
EXEC dbo.DiallerUpdate@CustomerID,@CustomerName,@CustomerStatus
END
GO 
CREATE TRIGGER CustomerDelete ON Customer AFTER DELETE
AS BEGIN
DECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT
--Get Record Details
SELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM deleted
--Add to Audit
INSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)
SELECT 'Record Deleted',@CustomerID,@CustomerName,@CustomerStatus
--Call Delete Procedure
EXEC dbo.DiallerDelete@CustomerID
END
GO

And that is pretty much it, we now have an audit of data, and the records on both sides will be syncrised within milliseconds... If it needs to be done cross server, change the EXEC command to {servername}.{databasename}.{schema}.DiallerDelete etc/

Here we can test it.

SQL

-- Insert Data
INSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 1',0
INSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 2',0
INSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 3',0
UPDATE Customer SET CustomerStatus=2 WHERE CustomerID=1
UPDATE Customer SET CustomerName=' Name 4' WHERE CustomerID=2
DELETE FROM Customer WHERE CustomerID=3
--Review Data
SELECT * FROM Dialler
SELECT * FROM Customer
SELECT * FROM CustomerAudit
Selecting from the tables you can now check that each process has done it's job properly. by creating the different processes, it has also allowed us to be a lot more creative with what we have done.

Results

Dialler Records
CustomerIDCustomerStatusCustomerNameDiallerStatus
12Name 10
20Name 40
Customer Records
CustomerIDCustomerNameCustomerStatus
1Name 12
2Name 40
Audit Records
CustomerAuditIDCustomerAuditTypeCustomerIDCustomerNameCustomerStatus
1Record Created1Name 10
2Record Created2Name 20
3Record Created3Name 30
4Record Updated1Name 12
5Record Updated2Name 40
6Record Deleted3Name 30

Author

Was this helpful?

Please note, this commenting system is still in final testing.
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink クッキーポリシーサイトマップ

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
The settings on this site are set to allow all cookies. These can be changed on our Cookie Policy & Settings page.
By continuing to use this site you agree to the use of cookies.
Ousia Logo
Logout
Ousia CMS Loader