SQLServer数据库的“生成脚本”功能详解(避免导出来的sql脚本还原的数据库缺失)


·

 

下方直接用一个例子来引起话题:

SQL Server生成SQL脚本丢失了默认值和外键的问题

 SQL Server在生成SQL Scripts(SQL 脚本)的时候,默认是没有默认值和外键等的。

  具体解决的方法如下:

  1、生成SQL脚本的时候在“常规”标签选择“全部显示”,再选上“编写全部对象脚本”。

  2、在“选项”标签页里,选中表脚本选项的所有内容,包括:   
  -编写索引脚本   
  -编写全文索引脚本   
  -编写触发器脚本   
  -编写主键、外键、默认值、和检查约束脚本

  这样生成的SQL脚本就包括了主键、外键、默认值、和检查约束脚本等了。

 

不知道是受SQLSERVER2000,2005的影响还是,Next的惯性思维,在使用数据库“生成脚本”的时候基本上不会太多关注里面的配置选项,但其实从SQLSERVER2008开始,微软在生成脚本这方面做了很大的改进,让用户自己选择配置的东西更多了。

例如经常用到的一个是:从一个数据库将数据导入另一个库,或者向下兼容还原,以前操作很麻烦的,导入导出,链接等等。我自己是经常用第三方软件生成Insert 的SQL,然后到目的数据库执行,当然数据不是太多的情况,这是种比较快速的方法。

刚好最近在做数据库迁移时,用到了“生成数据脚本”这个功能,目的就是实现生成Insert SQL的方式还原数据库。

 

那我们来看下SQLSERVER2008的“生成脚本”功能,不知道大家有没有详细看看里面的配置,没有的话刚好一起看下:

 

导出的sql语句:

上图用红框标记的是比较常用的功能,你是否有注意到呢?

通过这些配置,基本上可以复制一个数据库的所有SQL,轻松实现数据库不同版本双向复制。

这个问题帮我一个大忙呀,不然又要徒劳的写一个重复的功能到Sqlserver上,看来以后配置的地方还是要多留意下的。

 

分析说明

这个功能从sqlserver2000就有,独立出来是在sqlserver2005
但是很直接的用经验告诉你,如果想生成带数据的脚本,比如说sqlserver2008生成sqlserver2000的脚本,或者sqlserver2005的脚本,这个工具生成的代码比较机械化,很多内容其实前后冲突,比如说建立外键关系,而且生成低版本的脚本,甚至有错误。 导致数据库还原失败甚至是缺漏还原,根本无法正常使用。
 
 
解决方法:主外键关系,在导出脚本的时候注意一下先后顺序就可以了。(但是,如果导出的文件有几个G以上内,根本就无法打开编辑;这时应该怎么办呢?)
求解决方案。
 
 
这里是其中的一种解决方案 : 将架构和数据分开处理
————————————————

我们直接说方法,不得不说技术活是的细活。步骤如下:

第一步:生成脚本。数据库名称右键单击,以此选择“任务”->"生成脚本",和标准的生成脚本方法相同,但此处选择“仅限架构”【见下图】,导出数据库对象创建脚本。

 

 

 

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

 

 

 

第三步:先只执行部分脚本。先执行除 “数据库表约束脚本” 外的脚本,导出数据后最后执行数据库表约束脚本。

第四步:迁移数据。使用导出(“任务”->"导出")功能,将高版本数据导入到低版本当中。此步骤之前建议备份数据库,导数据出现错误,可以及时还原,重新进行第四步。

第五步:执行剩余脚本。迁移数据成功后,执行数据库表约束脚本(4-1.表和视图创建_约束.sql)。
————————————————

 
 

·················

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM