SQL Server导出导入数据方法

时间:2021-12-26 06:42:47
  一、导出导入SQL Server里某个数据库 1.       在SQL Server企业管理器里选中要转移的数据库,按鼠标右键,选所有任务->备份数据库。 2.备份 选数据库-完全, 目的 备份到 按添加按钮 文件名 在SQL Server服务器硬盘下输入一个自定义的备份数据库文件名(后缀一般是bak) 重写 选重写现有媒体 最后按确定按钮。 如果生成的备份数据库文件大于1M,要用压缩工具压缩后再到Internet上传输。 3.通过FTP或者remote desktop或者pcanywhere等方法 把第二步生成的备份数据库文件或者其压缩后的文件传到目的SQL Server数据库,如果有压缩要解压。 4.目的SQL Server数据库如果还没有此数据库,先创建一个新的数据库; 然后选中这个新创建的数据库,按鼠标右键,选所有任务->还原数据库 还原->从设备->选择设备->磁盘->添加(找到要导入的备份数据库文件名)->确定 还原备份集->数据库-完全 最后按确定按钮。完全的数据库导入成功了。 (如果在已经存在的SQL Server数据库上还原数据库可能遇到有还有其它人正在使用它而恢复操做失败, 可以去看 ->管理->当前活动->锁/对象->找到数据库下锁的进程号->到查询分析器里用kill 进程号杀掉这些锁, 然后再做还原) 注意:如果在原有的目的SQL Server数据库上从备份文件(*.bak)还原数据库会把已经存在的表、存储过程等数据库对象全部替换成最近这次导入的备份数据库里的内容。如果一定要还原备份文件(*.bak)里部分数据,需要另外建一个新数据库, 其逻辑名称和数量同备份文件(*.bak)里数据库的逻辑名称和数量一致;新数据库的物理文件名称取得一定要和备份文件(*.bak)里数据库的物理文件不一样才行。   二、导出导入 SQL Server 里某个表 1. 没有防火墙,同一个局域网里或不在同一个局域网里 , 但通过 Internet 可以互相访问 SQL Server 企业管理器里选中目的数据库 ,按鼠标右键,选所有任务 -> 导入数据 -> 弹出数据转换服务导入 / 导出向导窗口 -> 下一步 -> 选数据源 -> 数据源(用于 SQL Server Microfost OLE DB 提供程序) -> 服务器 ( 可选择局域网内能访问到的所有 SQL Server 服务器 , 或者直接输入 IP 地址 )-> 选择使用 windows 身份验证还是使用 SQL Serve 身份验证 ( 输入数据库的用户名和密码 )-> 数据库 ( 可选择上面选中 SQL Server 服务器上所有权限范围内的数据库 )-> 下一步 -> 选择目的 -> 目的(用于 SQL Server Microfost OLE DB 提供程序) -> 服务器 ( 默认为上一步里选中的导出服务器,也可以选其它局域网内能访问到的所有 SQL Server 服务器 , 或者直接输入 IP 地址 )-> 目的数据库 ( 可选择上面选中 SQL Server 服务器上所有权限范围内的数据库 )-> 下一步 -> 制定表复制或查询 -> 选从源数据库复制表和视图 ( 也可以选择用一条查询指定要传输的数据 )-> 下一步 -> 选择源表和视图 -> 在要导入的表和视图前面选中源 -> 目的出现同样的表名 ( 可以手工修改成别的表名 )-> 转换 -> 列映射和转换里面可以修改源表和目的表之间字段的对应关系,修改目的表字段的类型和长度等, 并可以选择创建目的表,在目的表中增加行,除去并重新创建目的表,启用标志插入等选项 -> 确定 -> 下一步 -> 保存、调度和复制包 -> 时间 -> 立即运行(如果要实现隔一段时间自动导出导入数据,选调度 DTS 包以便以后执行) -> 保存 ( 可以不选 )->[ 保存 DTS ( 如果以后还要转移这批相同的数据,可以把本次导出导入的内容和步骤保存起来, 存到 SQL Server 即可,保存的时候要输入 DTS 的包名及详细描述 )-> 下一步 -> ]-> 完成 正在执行包 -> 图形界面显示创建表及插入记录的步骤和状态 -> 完成 2. 经过防火墙,不在同一个局域网里 、导出表里的数据到文本文件: SQL Server 企业管理器里选中目的数据库,按鼠标右键,选所有任务 -> 导入数据 -> 弹出数据转换服务导入 / 导出向导窗口 -> 下一步 -> 选数据源 -> 数据源(用于 SQL Server Microfost OLE DB 提供程序) -> 服务器 ( 可选择局域网内能访问到的所有 SQL Server 服务器 )-> 选择使用 windows 身份验证还是使用 SQL Serve 身份验证 ( 输入数据库的用户名和密码 )-> 数据库 ( 可选择上面选中 SQL Server 服务器上所有权限范围内的数据库 )-> 下一步 -> 选择目的 -> 目的 ( 文本文件 )-> 文件名 ( 在自己的电脑硬盘中生成一个自定义的文本文件 ) -> 下一步 -> 制定表复制或查询 -> 选从源数据库复制表和视图 ( 也可以选择用一条查询指定要传输的数据 )-> 下一步 -> 选择目的文件格式 -> ( 选择要导出的表 )-> 用默认的带分隔符 -> 选第一行包含有列名称选项 -> 下一步 -> 保存、调度和复制包 -> 时间 -> 立即运行(如果要实现隔一段时间自动导出到文本文件,选调度 DTS 包以便以后执行) -> 保存 ( 可以不选 )-> [ 保存 DTS ( 保存的时候要输入 DTS 的包名及详细描述 )-> 下一步 ->]-> 完成 正在执行包 -> 图形界面显示表到文本文件的步骤和状态 -> 完成 如果生成的文本文件大于 1M ,要用压缩工具压缩后再到 Internet 上传输。 、通过 FTP 或者 remote desktop 或者 pcanywhere 等方法把 步生成的文本文件或者其压缩后的文件传到目的 SQL Server 数据库,如果有压缩要解压。 、把文本文件导入目的 SQL Server 数据库 直接把文本文件导入目的 SQL Server 数据库里跟文本文件同名的新表名时,默认的会把所有字段类型都变成字符串。 所以我们要这样做: 在源 SQL Server 数据库上先生成创建表的 sql 语句 SQL Server 查询分析器里 -> 选中源数据库里表名 -> 按右键 -> 在新窗口中编写对象脚本 -> 创建 -> 复制下新窗口内创建表名的 sql 语句 到目标 SQL Server 数据库上查询分析器里执行创建表名的 sql 语句,生成空表结构。 ( 如果已经存在这样的表名,修改建表的 sql 语句,在表名后面加上导入时间的年月信息,例如 table_0113) 调用导入 / 导出工具 -> 弹出数据转换服务导入 / 导出向导窗口 -> 下一步 -> 选数据源 -> 数据源(文本文件) -> 文件名 ( 已传到目的 SQL Server 数据库下要导入的文本文件,后缀可以不是 *.txt 但是常规文本编辑器能打开的文件,文件类型选全部 )-> 下一步 -> 选择文件格式 -> 用默认的带分隔符 -> 选第一行包含有列名称选项 -> 下一步 -> 制定列分割符 -> 逗号 -> 下一步 -> 选择目的 -> 目的 ( 用于 SQL Server Microfost OLE DB 提供程序 )-> 服务器 ( 可选择目标局域网内能访问到的所有 SQL Server 服务器 )-> 选择使用 windows 身份验证还是使用 SQL Serve 身份验证 ( 输入数据库的用户名和密码 )-> 数据库 ( 可选择上面选中 SQL Server 服务器上所有权限范围内的数据库 )-> 下一步 -> 选择源表和视图 -> 修改目的表名为刚才创建的表名 -> 转换 ( 在目的表中追加行 ) -> 下一步 -> 保存、调度和复制包 -> 时间 -> 立即运行(如果要实现隔一段时间自动把文本文件导入,选调度 DTS 包以便以后执行) -> 保存 ( 可以不选 )-> [ 保存 DTS ( 保存的时候要输入 DTS 的包名及详细描述 )-> 下一步 ->]-> 完成 正在执行包 -> 图形界面显示文本文件到表的步骤和状态 -> 完成 如果要更改导入时间的年月信息的表名,例如 table_0113 到原来的表名, 在企业管理器里把原来的表名改成 table_old_0113 table_0113 改名成 table 这会对应用程序里频繁访问的表照成一定的中断。 注意:源表上的建的索引和主键约束不能用上面介绍的 1 2 方法转移过来,还需要手工来建索引和主键。 标志种子和 not null 的约束可以继承过来。 导入视图时会把源视图里所有的真实数据导入成一个新表,而不是视图。 三、 SQL Server 存储过程或用户定义的函数导出导入 1 、导出存储过程或用户定义的函数成 *.sql 文件 SQL Server 企业管理器里选中源数据库, 存储过程 -> 单选或者多选中要转移的存储过程 -> 用户定义的函数 -> 单选或者多选中要转移的函数 -> 按鼠标右键,选所有任务 -> 生成 SQL 脚本 -> 确定 -> 在自己的电脑硬盘中生成一个自定义的 *.sql 文件 -> 保存 -> 正在生成 SQL 脚本 -> 成功 2 、如果目的数据库经过防火墙,不在同一个局域网里, 要通过 FTP 或者 remote desktop 或者 pcanywhere 等方法把第 1 步生成的 *.sql 文件传到目的 SQL Server 数据库服务器上。 3 、用查询分析器进入 SQL Server 目的数据库, 从菜单里选文件 -> 打开 -> 打开查询文件 -> 选中第 1 步生成的 *.sql 文件 -> 点执行查询的绿色倒三角型快捷键 -> 查询窗口里会出现执行后的消息(有时候可能因为存储过程和用户定义的函数之间有一定的依赖关系,会报一些错。 最好先执行用户定义的函数的 *.sql 文件,再执行存储过程的 *.sql 文件) 四、 ORACLE 数据库里表导入 SQL Server 数据库 1 、在目的 SQL Server 数据库服务器上安装 ORACLE Client 软件或者 ORACLE ODBC Driver. $ORACLE_HOMEnetworkadmintnsnames.ora 里配置 ORACLE 数据库的别名 (service name) 具体配置方法可以参考本站文章 :客户端连服务器的注意事项 2 、在 WIN2000 或者 win2003 服务器 -> 管理工具 -> 数据源 (ODBC)-> 系统 DSN (本机器上 NT 域用户都可以用) -> 添加 ->ORACLE ODBC Driver-> 完成 -> data source name 可以自定义,我一般填 ORACLE 数据库的 sid 标志, description 里可以填 ORACLE 数据库详细描述,也可以不填 -> data source service name 填第 1 步定义的 ORACLE 数据库别名 ->OK (用户 DSN 和文件 DSN 也可以类似配置,但使用的时候有一些限制) 3 SQL Server 的导入和导出数据工具里 -> 选数据源 -> 数据源(其它( ODBC 数据源)) -> 选第 2 步在 ODBC 里定义的系统 DSN source name ,用户名密码处填写 ORACLE 系统的用户名和密码 -> 下一步 -> 选择目的,选 SQL Server 数据库(跟上面第二点讲的一致,就不重复了)。 注意:在 ORACLE 表和 SQL Server 表之间 ' 转换 ' 那步很重要, 可以改变默认的字段数据类型,如 image->text,decimal->int 五、 SQL Server 数据库里表导入 ORACLE 数据库 方法一 . 导出目的选通过 ODBC 数据源里定义的 ORACLE 数据库 , 注意 ORACLE 里表名都是大写的 . 我一般在 ORACLE 这边先生成好表结构 , 再选择 SQL SERVER 源表往 ORACLE 目的表里追加数据 . 数据传输速度比方法二慢 . 方法二 . SQL Server 数据库导入数据到 ORACLE 数据库可以选择用 Windows ORACLE9i 企业或者个人版数据库做中转。 具体配置方法可以参考这两篇文章 : Oracle 异构服务实践 在ORACLE里设置访问多个SQL Server数据库 注意: ORACLE 通过访问 SQL Server 的数据库链接时,用 select * 的时候字段名是用双引号引起来的。