用TableDiff產生SQL Server同步腳本_Mssql數據庫教程
推薦:微軟SQL Server 2008 的新壓縮特性關于SQL Server壓縮的故事,最早是從SQL Server 2005開始的,在企業版和開發版中增加了一種叫做vardecimal的新存儲格式,這個表級的選項會影響到decimal和numeric字段。當對值的精度要求低于字
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" |
分享:3個步驟結束網站惡夢-SQL注入隱患!許多網站程序在編寫時,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。 SQL注入是什么? 許多網站程序在編寫時,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱
- sql 語句練習與答案
- 深入C++ string.find()函數的用法總結
- SQL Server中刪除重復數據的幾個方法
- sql刪除重復數據的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數據庫,提示 無法為該請求檢索數據 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數的用法實例詳解
- 相關鏈接:
- 教程說明:
Mssql數據庫教程-用TableDiff產生SQL Server同步腳本。