SQL Server数据库中导入导出数据及结构时主外键关系的处理-程序员宅基地

技术标签: 数据结构与算法  数据库  

2015-01-26

  软件开发中,经常涉及到不同数据库(包括不同产品的不同版本)之间的数据结构与数据的导入导出。处理过程中会遇到很多问题,尤为突出重要的一个问题就是主从表之间,从表有外检约束,从而导致部分数据无法导入。

 

  情景一、同一数据库产品,相同版本

  此种情况下源数据库与目标数据库的数据结构与数据的导入导出非常简单。

方法1:备份源数据库,恢复到目标数据库即完成。

方法2:使用SQL Sever数据库自带的【复制数据库】功能或者【导入数据】功能按照向导操作即可。

 

  情景二、同一数据库产品,不同版本

          情景1、源数据库版本低,目标数据库版本高

        此种情况处理方式同情景一。

          情景2、源数据库版本高,目标数据库版本低

        由于目标数据库版本低于源数据库,源数据库中产生的脚本架构无法兼容低版本,所以不能通过直接备份还原的方式来操作。

 

  本文以SQL Server2008R2数据库为数据源、SQL2008 Express为目标数据库为例主要解决主从表之间,从表有外检约束时,数据导入失败的问题。操作过程分为以下几个步骤:

  步骤1:从源数据库生成数据结构脚本【不包表含外键关系

 

 

  在数据源188连接上,右键点击源数据库》【任务】》【生成脚本】

弹出“生成和发布脚本”

点击【下一步】按钮,弹出“简介”窗口

点击【下一步】按钮,弹出“设置脚本编写选项”

点击【高级】按钮,弹出具体设置窗口【此步骤非常重要

将“编写外键脚本”的值设置为false,意思是这一步骤生成的数据结构脚本中不包含表之间的外键关系。其他选项根据实际情况设置。

点击【确定】按钮,生成脚本,入下图。

 将脚本另存为“OriginalDataStructureWithoutFK.sql”。

 

  步骤2:导入数据结构脚本至目标数据库

 

 

  在目标服务器上新建目标数据库,命名同源数据库名(其他命名也可以)。

选中新建的数据库,打开步骤一中保存的”OriginalDataStructureWithoutFK.sql“脚本文件,运行该文件,运行成功后,目标数据库中成功创建了表、视图、存储过程、自定义函数,如下图

 

 

  步骤3:从源数据库创建数据脚本

 

 

  此步骤中,借助第三方数据库插件SqlAssistant,其拥有强大的数据库扩展功能,本文不做详细介绍。可以到SqlAssistant官网了解更多http://www.softtreetech.com/isql.htm

选中源数据库,点击右键,【Sql Assistant】》【Scripts Data】

 

弹出”Table Data Export” 导出Table数据窗口

默认选中源数据库与所有的表。点击【Export】按钮,生成数据脚本至【新建查询窗口】中

保存该数据脚本为“OriginalData.sql”。

  步骤4:导入数据脚本至目标数据库

 

 

对于表中主键或者其他设置为int类型,且设置自增长类型的列,需要做以下处理:

SET IDENTITY_INSERT dbo.T_ACL_User ON ;

一般字段如果是identity的,比如定义的时候nameid identity(1,1)就是说从1开始增长,每次加1,那么插入一条记录nameid字段是不需要手动赋值(一般也不允许)。那么有时候需要插入自定义值的时候,就设置set identity_insert on;就可以手动插入了。操作完数据插入后,再将其关闭。

 

选中目标数据库,并打开步骤3中保存的“OriginalData.sql”数据脚本,运行之,成功后,查看数据表

查询结果可以看出已经成功导入数据。

设置 SET IDENTITY_INSERT dbo.T_ACL_User Off ;

 

  步骤5:从源数据库生成仅包含表外键关系的数据结构脚本

 

 

  步骤与步骤1大致相同,最后一步设置相反

红色框内,将“编写外键脚本”设置为True,其他选项与步骤1中设置相反。点击"确定"按钮,生成脚本,另存为“OriginalDataStructureOnlyWithFK.sql”。

  步骤6:导入外键结构关系脚本至目标数据库

 

 

  选中目标数据库,打开步骤5中保存的“OriginalDataStructureOnlyWithFK.sql”脚本文件,运行之,运行成功后,查看表结构

外键已经成功创建。

 

转载于:https://www.cnblogs.com/SavionZhang/p/4250952.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baibin7264/article/details/101089886

智能推荐

在Unity3D中的渲染优化-Drawcall的概念_draw call cpu设置渲染状态-程序员宅基地

文章浏览阅读338次。Draw Call本身的含义很简单,就是CPU调用图像编程接口,如OpenGL中的glDrawElements命令或者DirectX中的DrawIndexedPrimitive命令,以命令GPU进行渲染的操作。一个常见的误区是,Draw Call中造成性能问题的元凶是GPU,认为GPU上的状态切换是耗时的,其实不是的,真正“拖后腿”其实的是CPU。在深入理解Draw Call之前,我们先来看一下CPU和GPU之间的流水线化是怎么实现的,即它们是如何相互独立一起工作的。1.CPU和GPU是如何实现_draw call cpu设置渲染状态

mysql8创建用户并授予权限和移除权限_mysql8授权-程序员宅基地

文章浏览阅读256次。mysql8创建用户并授予所有库的所有权限_mysql8授权

MySQL联合索引与索引下推图文详解_联合索引图解-程序员宅基地

文章浏览阅读3k次,点赞5次,收藏25次。联合索引的树结构、最左匹配原则、如何选择合适的索引列顺序、索引下推图文讲解_联合索引图解

nslookup-程序员宅基地

文章浏览阅读49次。nslookupserver 114.114.114.114set q=mx set q=aset q=ptrset q=ns转载于:https://www.cnblogs.com/huang99882008/p/10696756.html_nslookup时显示的server为114.114.114.114

计算机控制系统的典型类型是什么,计算机控制系统作业参考答案-程序员宅基地

文章浏览阅读2.2k次。计算机控制系统作业参考答案 (15页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.90 积分计算机控制系统作业参考答案作业一第一章11什么是计算机控制系统画出典型计算机控制系统的方框图。答计算机控制系统又称数字控制系统,是指计算机参与控制的自动控制系统,既用算机代替模拟控制装置,对被控对象进行调节和控制控制系统中的计算机是由硬件和软件两部分组成的硬..._kkxkt

通过广域网(Intelnet)进行远程唤醒[或开机]_magic packet utility-程序员宅基地

文章浏览阅读4k次。WAN远程唤醒与LAN远程唤醒有着诸多不同,WAN远程唤醒首先需要主板、网卡等硬件的支持,需要一条有效的Intelnet连接,与Lan远程唤醒不同的是,WAN远程唤醒需要经过路由器。WAN远程唤醒与LAN远程唤醒有着诸多不同,WAN远程唤醒首先需要主板、网卡等硬件的支持,需要一条有效的Intelnet连接,与Lan远程唤醒不同的是,WAN远程唤醒需要经过路由器,因此下面我就来详细讲解如何在路由_magic packet utility

随便推点

linux执行apt-get更新,或者安装软件包时提示,W: Ignoring Provides line with DepCompareOp for package *****-程序员宅基地

文章浏览阅读3k次,点赞7次,收藏12次。出现的问题:一个最简单的办法:直接换源:可以换我推荐的源,阿里云的这个源步骤:1.sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份2.把sources.list的内容全部删掉,把以下的内容复制进去sudo vim /etc/apt/sources.list #修改//阿里云源deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe _w: ignoring provides line with depcompareop for package libreoffice-l10n

[C++程序设计](入门级题解)小鱼比可爱-程序员宅基地

文章浏览阅读3.8k次。题目描述人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这..._小鱼比可爱

Tuxera ntfs读写插件工具v2022版本 支持macOS15系统_tuxera ntfs 2022序列号-程序员宅基地

文章浏览阅读1.7k次。Tuxera ntfs读写插件工具v2022版本 支持macOS15系统_tuxera ntfs 2022序列号

Pytorch使用collate_fn拼接维度不同的数据LSTM_pytorch collate_fn扩充数据集-程序员宅基地

文章浏览阅读925次。DataLoader有一个参数collate_fn,这个参数接收自定义`collate`函数,这个函数在数据加载(即通过Dataloader取一个batch数据)之前,定义对每个batch数据的处理方式。_pytorch collate_fn扩充数据集

水煮三国--第一章 创业时代的七堂必修课 -程序员宅基地

文章浏览阅读941次。 热闹的春节很快过去了,大四的学生迎来了令人紧张的最后一个学期。刘备找工作的事还一点着落没有,他止不住地唉声叹气地问关羽、张飞:“你们说,为什么我连一份工作都找不到呢?”   张飞不客气地说:“你看你,整天一副愁眉苦脸的样子,谁要你呀?”   关羽也说:“刘备,不是我们说你,你必须积极点儿。人一积极起来,精神劲儿也出来了。那些负责招聘的考官,要的是活力充沛的小伙子。像你这样消极,只能适

Linux小白入门教程 - Ch4.3 文件搜索命令_在linux中 1数据块 512字节 0.5k 100mb = 102400kb = 204800-程序员宅基地

文章浏览阅读152次。4.3 文件搜索命令4.3.1 文件搜索命令 findfind 文件搜索命令名称:find命令所在路径:/bin/find执行权限:所有用户功能:文件搜索语法:find [搜索范围] [匹配条件]建议:不要在服务器使用高峰期的时候使用 find 进行查找查找的过程中,搜索的范围越小越好,尽量不要在根目录进行查找搜索的条件越精准越好,找到的速度越快,消耗的资源越少根据文件名查找* 匹配任意字符; ? 匹配单个字符[]# find /etc -name init _在linux中 1数据块 512字节 0.5k 100mb = 102400kb = 204800

推荐文章

热门文章

相关标签