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”脚本文件,运行之,运行成功后,查看表结构
外键已经成功创建。
SQL Server数据库中导入导出数据及结构时主外键关系的处理的更多相关文章
- 清空SQL Server数据库中所有表数据的方法(转)
清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...
- 清空SQL Server数据库中所有表数据的方法
原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可 ...
- MySQL创建数据表并建立主外键关系
为mysql数据表建立主外键需要注意以下几点: 需要建立主外键关系的两个表的存储引擎必须是InnoDB. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型. 外键列和参照列必须创建索引, ...
- 转:SQL SERVER数据库中实现快速的数据提取和数据分页
探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...
- C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]
C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...
- oracle中导入导出数据备份数据库
原文:oracle中导入导出数据备份数据库 数据库所在位置 将数据导出到的文件名 用户名 备份数据库 :exp c ...
- sql server数据库中char,varchar,nvarchar字段的区别
Char,varchar,nvarchar字段是sql server数据库中的三种字段类型.好多人在选择存储的时候不知道如何抉择,我给大家讲下这个三个字段类型的区别. Char(n)是长度为n个字节的 ...
- .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)
.NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...
- C#从SQL server数据库中读取l图片和存入图片
原文:C#从SQL server数据库中读取l图片和存入图片 本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStr ...
随机推荐
- luogu P2071 座位安排
这个题可以被分为两部分 1.匈牙利算法(板子) 2.邻接表存图(好像这不能称为第二部分) 每一排能坐两个人,那就把一排拆成两个点, 用匈牙利算法求最大匹配 每个人都只想坐两排,说明每个人只会连四条边 ...
- spring security oauth2 client_credentials模
spring security oauth2 client_credentials模 https://www.jianshu.com/p/1c3eea71410e 序 本文主要简单介绍一下spring ...
- maven 使用 log4j
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可 ...
- C++(2):错误:undefined reference to `__gxx_personality_v0'
1. Linux Develop Notes * 编译 c++ 程序需要添加 -lstdc++ sample: gcc -lstdc++ -o test test.c,否则会报 " ...
- SQL随记(二)
1.purge关键字:可以清除oracle 回收站(recyclebin)中的表和索引并释放与其相关的空间,还可清空回收站,或者清除表空间中记录的已删除的部分表空间.但是purge后不能回滚和恢复. ...
- EF CodeFirst系列(8)--- FluentApi配置单个实体
我们已经知道了在OnModelCreating()方法中可以通过FluentApi对所有的实体类进行配置,然而当实体类很多时,我们把所有的配置都放在OnModelCreating()方法中很难维护.E ...
- Linux查看系统信息的命令及已安装软件包的命令
系统 uname -a查看内核/操作系统/CPU信息head -n 1 /etc/issue查看操作系统版本cat /proc/cpuinfo查看CPU信息hostname查看计算机名lspci -t ...
- 第十三节:实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim)
一. 监视锁(Monitor和lock) 1. Monitor类,限定线程个数的一把锁,两个核心方法: Enter:锁住某个资源. Exit:退出某一个资源. 测试案例:开启5个线程同时对一个变量进行 ...
- django发送邮件send_mail&send_mass_mail
一.配置 在setting.py中进行相关配置: EMAIL_HOST = 'smtp.sina.cn' #SMTP地址 EMAIL_PORT = 25 #SMTP端口 EMAIL_HOST_USER ...
- k64 datasheet学习笔记26--Oscillator (OSC)
1.前言 OSC模块是一个晶体振荡器. 该模块使用晶体或谐振器与外部连接,为MCU产生一个参考时钟. 主要为下图红色框住的部分 2.特性和模式 Supports 32 kHz crystals (Lo ...