当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 用TableDiff产生SQL Server同步脚本

MSSQL
开源MySQL公司停止提供企业版源代码tar包
细化解析:MySQL+Webmin轻松创建数据库
用mysql做站点时怎样记录未知错误的发生
SQL数据库操作类
如何利用SQL Server数据库快照形成报表
SQL Server中应当怎样得到自动编号字段
SQL Server数据库连接中常见的错误分析
详细讲解SQL Server数据库的文件恢复技术
轻松掌握SQL Server数据库的六个实用技巧
SQL Server数据库涉及到的数据仓库概念
深入了解SQL Server 2008 商业智能平台
剖析SQL Server 事务日志的收缩和截断
如何在不同版本的SQL Server中存储数据
怎样缩小SQL Server数据库的日志文件
SQL Server中两种修改对象所有者的方法
轻松掌握SQL Server存储过程的命名标准
怎样从旧版本SQL Server中重新存储数据
快速掌握如何使用SQL Server来过滤数据
教你快速掌握两个SQL Server的维护技巧
有效地使用 SQL事件探查器的提示和技巧

MSSQL 中的 用TableDiff产生SQL Server同步脚本


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 141 ::
收藏到网摘: n/a

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