国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

用TableDiff產生SQL Server同步腳本

2024-08-31 00:45:51
字體:
來源:轉載
供稿:網友

TableDiff是一個控制臺,它可以在SQL Server的表之間進行數據比較。另外,因為它是用SQL Server打包的,所以如果你想在不同的數據庫環境下檢查查找表的話,你就不需要另外購買其他工具。

在不同的數據庫環境中,DBA經常不得不在查找表中尋找它們的不同(例如:開發、質量保證和生產等不同的環境下)。這些查找表中的數據必須適應于所有的環境,這樣才能確保測試的準確。

在市場上有一些非常好的工具可以進行這些比較,也能執行很多其它功能。但是現在你不需要去購買它們了,因為SQL Server已經自帶了這種工具,那就是TableDiff,它能為你完成這些功能。

TableDiff使你可以很輕松地在表中進行數據比較,同時它也可以會為你創建腳本來同步程序環境。另外,作為一個能使查找表在測試環境和產品環境之間同步的優秀工具,TableDiff對于數據在產品服務器和復制服務器之間的同步也同樣是非常有用的,這樣,當發生復制問題的時候,它就能體現出優勢了。

示例

TabelDiff是一個控制臺應用軟件,所以,你需要通過命令提示符、批處理文件或者通過使用xp_cmdshell的SQL Server來調用它。在這個例子中,我將在同一個服務器上的兩個數據庫之間搭建一個小的環境,然后比較兩個表中的數據。在這里我是通過一個批處理文件來調用TableDiff。

Listing A中的腳本創建了兩個數據庫,并在每個數據庫中創建了一個SourceTable表。然后將數據分別插入到每個環境中的SourceTable表里面,這時候,插入到兩個表中的數據是明顯不同的。(就我的SQL Server 2005環境而言,TableDiff在這個目錄下:C:Program FilesMicrosoft SQL ServerCOM。文件的位置對你指定安裝是非常重要的,因為你調用批處理文件進行創建的時候需要知道它的確切位置。

批處理文件

在這個例子中,我將調用TableDiff utility,同時帶上了一些必要的參數,對DatabaseA和DatabaseB兩個數據庫中各自的SourceTable表的數據進行比較。Listing B中的腳本帶著參數通過源服務器(SourceServer)、源數據庫( SourceDatabase)、源表 SourceTable、目標服務器( DestinationServer)、目標數據庫( DestinationDatabase)和目標表(DestinationTable)到達TableDiff utility。對于每一個站點來說,服務器名和表名都是相同的,因為我是在同一個數據庫服務器的兩個不同的數據庫中比較使用的同一個名字的表。我通過的最后目的地是當地,同步腳本放置在那里。我將這個腳本存放在C:/根目錄下,名字為diffs.txt。

一旦我執行了這個批處理文件,在Listing C中的文本信息就會被放到C:diffs.txt這個文件里面。這個TSQL腳本能同步運行兩個數據庫之間的表。

使用簡單

TableDiff utility使用非常簡單,配置也很方便,因為它是用SQL Server打包的,所以不需要購買任何其他附加的工具來同步不同環境下的表。由于它使用非常方便,也很容易獲得它,所以如果有必要,我們就能使用它來開發一些解決方案自動創建腳本,以便同步不同的環境。

Tim Chapman是一位SQL Server數據庫管理員,他現在在Louisville, KY的一家銀行工作,他具有7年以上的IT經驗,同時也獲得了微軟SQL Server 2000和SQL Server 2005認證。

列表A

以下為引用的內容:
use master
Go
IF DB_ID('DatabaseA') IS NOT NULL DROP DATABASE DatabaseA
GO
IF DB_ID('DatabaseB') IS NOT NULL DROP DATABASE DatabaseB
GO
CREATE DATABASE DatabaseA
GO
CREATE DATABASE DatabaseB
GO
USE DatabaseA
GO
CREATE TABLE SourceTable
( IDCol INT IDENTITY(1,1), Field1 SMALLINT, Field2 SMALLINT, Field3 SMALLINT, Field4 SMALLINT
)
GO
USE DatabaseB
GO
CREATE TABLE SourceTable
( IDCol INT IDENTITY(1,1), Field1 SMALLINT, Field2 SMALLINT, Field3 SMALLINT, Field4 SMALLINT
)
GO
USE DatabaseA
GO
INSERT INTO SourceTable
(Field1, Field2, Field3, Field4)
SELECT 1, 1, 1, 2
UNION
SELECT 1, 1, 2, 2
UNION
SELECT 1, 3, 2, 2
UNION
SELECT 1, 3, 2, 2
UNION
SELECT 4, 3, 2, 2
GO
USE DatabaseB
GO
INSERT INTO SourceTable
(Field1, Field2, Field3, Field4)
SELECT 1, 1, 1, 2
UNION
SELECT 1, 3, 2, 1
UNION
SELECT 1, 3, 2, 2
UNION
SELECT 1, 3, 2, 2
UNION
SELECT 5, 3, 2, 2
UNION
SELECT 5, 4, 3, 2
GO

列表B

以下為引用的內容:

cd Program FilesMicrosoft SQL ServerCOMTableDiff -sourceserver "DatabaseServer" -sourcedatabase "DatabaseA" -sourcetable "SourceTable" -destinationserver "DatabaseServer" -destinationdatabase "DatabaseB" -destinationtable "SourceTable" -f "C:diffs.txt"
PAUSE

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九龙县| 读书| 枞阳县| 永城市| 孟州市| 乐安县| 行唐县| 禹城市| 班玛县| 海盐县| 安乡县| 南岸区| 崇信县| 常州市| 饶阳县| 肃南| 田林县| 南昌市| 杂多县| 沈阳市| 大理市| 泰来县| 合川市| 宽城| 磐石市| 宿州市| 蓬莱市| 滕州市| 辽源市| 本溪| 祁门县| 盘锦市| 乾安县| 阿克陶县| 陇西县| 武宁县| 昌宁县| 瑞丽市| 南阳市| 平舆县| 耒阳市|