WEB开发网
开发学院数据库MSSQL Server 用TableDiff产生SQL Server同步脚本 阅读

用TableDiff产生SQL Server同步脚本

 2007-05-17 09:36:20 来源:WEB开发网   
核心提示: use masterGoIF DB_ID('DatabaseA') IS NOT NULLDROP DATABASE DatabaseAGOIF DB_ID('DatabaseB') IS NOT NULLDROP DATABASE DatabaseBGOC
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

批处理文件

在这个例子中,我将调用TableDiff utility,同时带上了一些必要的参数,对DatabaseA和DatabaseB两个数据库中各自的SourceTable表的数据进行比较。Listing B中的脚本带着参数通过源服务器(SourceServer)、源数据库( SourceDatabase)、源表 SourceTable、目标服务器( DestinationServer)、目标数据库( DestinationDatabase)和目标表(DestinationTable)到达TableDiff utility。对于每一个站点来说,服务器名和表名都是相同的,因为我是在同一个数据库服务器的两个不同的数据库中比较使用的同一个名字的表。我通过的最后目的地是当地,同步脚本放置在那里。我将这个脚本存放在C:/根目录下,名字为diffs.txt。

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

一旦我执行了这个批处理文件,在Listing C中的文本信息就会被放到C:diffs.txt这个文件里面。这个TSQL脚本能同步运行两个数据库之间的表。

-- Host: timtopchapmaniac
-- Database: [DatabaseB]
-- Table: [dbo].[SourceTable]
SET IDENTITY_INSERT [dbo].[SourceTable] ON
UPDATE [dbo].[SourceTable] SET [Field2]=1,[Field4]=2 WHERE [IDCol] = 2
UPDATE [dbo].[SourceTable] SET [Field1]=4 WHERE [IDCol] = 4
DELETE FROM [dbo].[SourceTable] WHERE [IDCol] = 5
SET IDENTITY_INSERT [dbo].[SourceTable] OFF

使用简单

TableDiff utility使用非常简单,配置也很方便,因为它是用SQL Server打包的,所以不需要购买任何其他附加的工具来同步不同环境下的表。由于它使用非常方便,也很容易获得它,所以如果有必要,我们就能使用它来开发一些解决方案自动创建脚本,以便同步不同的环境。

上一页  1 2 

Tags:TableDiff 产生 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接