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

MSSQL
J2EE基础应用:J2EE中SQL语句自动构造方法
SQL Server asp.net 数据提供程序连接池
SQL Server的怪辟:异常与孤立事务
一个修改Oracle数据库用户密码的小诀窍
SQL和Oracle对数据库事务处理的差异性
SQL SERVER应用问题解答13例(三)
设置Proxy Server和SQL Server实现互联网上数据库的安全
SQL Server 7.0 入门(一)
SQL Server 7.0 入门(二)
SQL Server 7.0 入门(三)
SQL Server 7.0 入门(四)
SQL Server 7.0 入门(五)
SQL Server 7.0 入门(七)
SQL Server 7.0 入门(八)
SQL Server XML 和 Web 应用体系结构(一)8
SQL Server XML 和 Web 应用体系结构(二)
SQL Server同Exchange Server结合应用--SQL Mail2
使用SQL Server 7.0建立一个安全的数据库的最好方法是
分布式查询和分布式事务
在SQL Server的存储过程中调用Com组件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 128 ::
收藏到网摘: 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