我比较两个SQL服务器数据库(分别为开发和实时环境,SQL2005和SQL2008)以检查两者之间的差异。如果我为每个数据库生成一个脚本,我可以使用简单的文本比较来突出显示差异。如何对生成的SQL脚本的输出进行排序?
问题是脚本需要采用相同的顺序以简化比较,避免存储过程顺序不同但内容相同的简单差异。
所以,如果我生成这个从发展:
1: CREATE TABLE dbo.Table1 (ID INT NOT NULL, Name VARCHAR(100) NULL)
2: CREATE TABLE dbo.Table2 (ID INT NOT NULL, Name VARCHAR(100) NULL)
3: CREATE TABLE dbo.Table3 (ID INT NOT NULL, Name VARCHAR(100) NULL)
这从现场:
1: CREATE TABLE dbo.Table1 (ID INT NOT NULL, Name VARCHAR(100) NULL)
2: CREATE TABLE dbo.Table3 (ID INT NOT NULL, Name VARCHAR(100) NULL)
3: CREATE TABLE dbo.Table2 (ID INT NOT NULL, Name VARCHAR(100) NULL)
两条相比较亮点线2和3不同,但他们实际上是相同的,只是生成脚本向导在实时环境的表2之前执行了table3。添加100个表格,存储过程,视图等,这很快就变成了一团糟。
我目前的选择是:
- 手动比较
- 前的内容进行排序创建一个程序在一个特定的顺序
- 找到一个免费的应用程序,排序生成的脚本来创建脚本
- 支付作为其套件工具的一部分的产品
- (其他方式)
希望我只缺少说“按名称排序脚本”的复选框,但我看不到任何这样做。我认为我不应该为“排序输出”选项或许多其他不需要的工具这样简单的事情付费,所以选项4应该是最后的选择。
编辑 我有充分的机会,以两个环境,但生活环境被锁定和托管虚拟服务器上,具有远程desktoping访问现场的典型方式。我的首选是将我能做的事复制到那里进行开发和比较。我可以为数据库中的每种对象生成脚本作为单独的文件(表格,SP,函数等)
您可能在通过查找CREATE脚本中的文本差异来比较数据库模式时遇到问题,但也许只是像使用Notepad2或其他东西来首先对所有行进行排序? –
@Mike:如果他按字母顺序对脚本中的所有行进行排序,他将如何分辨不同的对象是什么? – codeulike
任何文件比较工具,如“fc”.. –