sql server 2008 r2导入数据库必须先明确来源类型(脚本/备份/文件/向导),再匹配对应方法:脚本需改use、路径和库名;备份还原须用restore filelistonly查逻辑名并显式move;附加mdf/ldf要赋权限并验版本兼容性;向导导入需启用identity_insert及禁用约束。

SQL Server 2008 R2 导入数据库,不能只靠“拖脚本就完事”——USE 错库、CREATE DATABASE 路径权限不足、BULK INSERT 字段错位、甚至 RESTORE DATABASE 因文件被占用失败,都是高频卡点。核心判断是:**必须先明确导入来源类型,再选路径;否则 90% 的报错都源于混淆了“脚本导入”“备份还原”“数据迁移”三类操作。**
用 SQL 脚本导入(含架构+数据)时,必须手动改前缀和路径
SSMS 生成的“架构和数据”脚本默认以 USE [OldDBName] 开头,且 CREATE DATABASE 语句里硬编码了 .mdf 和 .ldf 的绝对路径(比如 'D:\GoogolOrderMangment_data.mdf')。目标服务器若没这个盘符或权限受限,执行直接报错。
- 打开脚本,在最顶部加
USE master;,并删掉原USE [xxx]行 - 查找所有
CREATE DATABASE块,把filename=后的路径改成目标服务器上真实可写的目录(如'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\NewDB_data.mdf') - 检查
IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'OldDBName')这类判断逻辑,确保数据库名已替换为目标名 - 执行前右键目标服务器 → “属性” → “数据库设置”,确认“默认数据库位置”与你写的路径一致,否则新建库会失败
用 .bak 备份文件还原时,RESTORE DATABASE 必须显式 MOVE
直接双击 .bak 或在 SSMS 图形界面点“还原”常失败,典型错误是 Directory lookup for the file "xxx.mdf" failed —— 因为备份时的物理路径在新服务器上不存在。必须用 T-SQL 显式重定向文件位置。
- 先运行
RESTORE FILELISTONLY FROM DISK = 'C:\Backups\MyDB.bak';查出逻辑文件名(如MyDB_Data、MyDB_Log) - 再执行完整还原命令,例如:
RESTORE DATABASE MyDB FROM DISK = 'C:\Backups\MyDB.bak' WITH MOVE 'MyDB_Data' TO 'C:\Data\MyDB.mdf', MOVE 'MyDB_Log' TO 'C:\Data\MyDB.ldf', REPLACE; -
REPLACE是关键,否则目标库存在时会拒绝覆盖;若目标库正在被其他连接使用,需先ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
用“导入数据”向导导入表数据时,标识列和约束要手动处理
向导默认不启用标识插入(SET IDENTITY_INSERT),也不禁用外键/触发器,导致主键冲突或级联失败。尤其当源表有 IDENTITY 列时,直接映射会报错 Cannot insert explicit value for identity column。
- 在向导第 5 步“选择源表和源视图”后,点击“编辑映射”,勾选“启用标识插入”
- 若目标表已存在且含外键,提前执行
ALTER TABLE TargetTable NOCHECK CONSTRAINT ALL;,导入完成后再CHECK CONSTRAINT ALL; - 避免用“复制表结构和数据”自动建表——它可能忽略
NOT NULL、默认值或索引,建议先用“生成脚本”导出架构,再单独导入数据
附加 MDF/LDF 文件时,文件权限和版本兼容性最容易被忽略
直接拷贝 .mdf 和 .ldf 后“附加”,看似最快,但实际踩坑最多:Windows 权限未赋予 SQL Server 服务账户读写权、文件被杀毒软件锁定、或源库是 SQL Server 2012+ 备份降级到 2008 R2 不支持。
- 右键
.mdf文件 → “属性” → “安全” → 给NT SERVICE\MSSQLSERVER(默认实例)或NT SERVICE\MSSQL$InstanceName添加“完全控制” - 附加前用
DBCC CHECKDB ('path\to\file.mdf') WITH NO_INFOMSGS;验证文件完整性(仅限脱机状态) - SQL Server 2008 R2 最高只支持 65536 版本号的数据库,若源库版本 > 65536(如 2012+),附加会报错
Invalid database version,此时只能换备份还原或脚本方式
真正耗时的从来不是执行命令,而是确认“你导入的到底是什么”——是带完整事务日志的备份?是人工编写的 DML 脚本?还是裸文件?每种来源对应一套不可混用的前置校验动作,漏掉任何一项,都会让后续所有操作变成无效调试。











