·
下方直接用一个例子来引起话题:
SQL Server生成SQL脚本丢失了默认值和外键的问题
SQL Server在生成SQL Scripts(SQL 脚本)的时候,默认是没有默认值和外键等的。
具体解决的方法如下:
1、生成SQL脚本的时候在“常规”标签选择“全部显示”,再选上“编写全部对象脚本”。
2、在“选项”标签页里,选中表脚本选项的所有内容,包括:
-编写索引脚本
-编写全文索引脚本
-编写触发器脚本
-编写主键、外键、默认值、和检查约束脚本这样生成的SQL脚本就包括了主键、外键、默认值、和检查约束脚本等了。
不知道是受SQLSERVER2000,2005的影响还是,Next的惯性思维,在使用数据库“生成脚本”的时候基本上不会太多关注里面的配置选项,但其实从SQLSERVER2008开始,微软在生成脚本这方面做了很大的改进,让用户自己选择配置的东西更多了。
例如经常用到的一个是:从一个数据库将数据导入另一个库,或者向下兼容还原,以前操作很麻烦的,导入导出,链接等等。我自己是经常用第三方软件生成Insert 的SQL,然后到目的数据库执行,当然数据不是太多的情况,这是种比较快速的方法。
刚好最近在做数据库迁移时,用到了“生成数据脚本”这个功能,目的就是实现生成Insert SQL的方式还原数据库。
那我们来看下SQLSERVER2008的“生成脚本”功能,不知道大家有没有详细看看里面的配置,没有的话刚好一起看下:



导出的sql语句:

上图用红框标记的是比较常用的功能,你是否有注意到呢?
通过这些配置,基本上可以复制一个数据库的所有SQL,轻松实现数据库不同版本双向复制。
这个问题帮我一个大忙呀,不然又要徒劳的写一个重复的功能到Sqlserver上,看来以后配置的地方还是要多留意下的。
分析说明:
我们直接说方法,不得不说技术活是的细活。步骤如下:
第一步:生成脚本。数据库名称右键单击,以此选择“任务”->"生成脚本",和标准的生成脚本方法相同,但此处选择“仅限架构”【见下图】,导出数据库对象创建脚本。

第二步:分解脚本。将数据库表约束创建语句从脚本中剥离出来,脚本中创建约束语句都在一块,很方便。如下图:

第三步:先只执行部分脚本。先执行除 “数据库表约束脚本” 外的脚本,导出数据后最后执行数据库表约束脚本。
第四步:迁移数据。使用导出(“任务”->"导出")功能,将高版本数据导入到低版本当中。此步骤之前建议备份数据库,导数据出现错误,可以及时还原,重新进行第四步。
第五步:执行剩余脚本。迁移数据成功后,执行数据库表约束脚本(4-1.表和视图创建_约束.sql)。
————————————————
·················

但是很直接的用经验告诉你,如果想生成带数据的脚本,比如说sqlserver2008生成sqlserver2000的脚本,或者sqlserver2005的脚本,这个工具生成的代码比较机械化,很多内容其实前后冲突,比如说建立外键关系,而且生成低版本的脚本,甚至有错误。 导致数据库还原失败甚至是缺漏还原,根本无法正常使用。