在SQL Server数据库管理中,附加、分离与删除数据库是基本操作。然而实际执行时,许多细节容易被忽略,导致操作失败。本文系统梳理这些操作的典型语法与常见陷阱,便于快速查阅。
附加数据库:sp_attach_db
首先介绍存储过程 sp_attach_db 的使用方法。该命令用于将数据库文件重新附加到SQL Server实例。其基本语法如下:
sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ]

参数详细说明:
@dbname:需要附加的数据库名称,必须唯一,数据类型为 sysname,默认值为 NULL。@filename1到@filename16:数据库文件的物理路径,最多可指定 16 个文件。文件列表至少包含主数据文件(.mdf),如果分离后文件被移动过,必须列出所有新路径。
返回码含义:0 代表成功,1 代表失败。
以下是实际操作示例。以下代码将 pubs 数据库的两个数据文件附加到当前服务器实例:
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf',
@filename2 = N'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs_log.ldf'
另一个示例:附加自定义数据库 Ty20051029101451aaa:
EXEC sp_attach_db @dbname = N'Ty20051029101451aaa',
@filename1 = N'd:5屏幕Ty20051029101451aaa_data.mdf',
@filename2 = N'd:5屏幕Ty20051029101451aaa_log.ldf'
执行上述命令后,问题即可解决。
删除数据库:DROP DATABASE
DROP DATABASE 命令用于删除一个或多个数据库及其关联的数据文件和磁盘文件,操作简洁明了。
语法格式如下:DROP DATABASE database_name [ ,...n ]
参数 database_name 用于指定待删除的数据库名称。若不确定数据库列表,可从 master 库执行 sp_helpdb 进行查询。
示例:
exec sp_helpdb database_name
exec Drpo DataBase [Ty20051029101451aaa]
分离与重新附加:sp_detach_db
在某些场景下,需要先使用 sp_detach_db 将数据库从当前实例分离,随后通过 CREATE DATABASE ... FOR ATTACH 重新附加。典型用法如下:
sp_detach_db Archive
GO
CREATE DATABASE Archive
ON PRIMARY (FILENAME = 'c:program filesmicrosoft sql servermssqldataarchdat1.mdf')
FOR ATTACH
GO
显示当前数据库信息
执行以下命令可快速列出所有数据库:
--select * from Master..sysDatabases
新建、脱机与恢复(特殊情况)
以下示例演示一个特殊流程:创建数据库后将其设置为脱机状态,再从备份文件恢复,完成后再次脱机。请务必注意命令执行顺序:
CREATE DATABASE TestOA
ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE TestOA From disk='C:Documents and SettingsAdministrator桌面帐套dataTemplate.Dat'
ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE
其他实用组合
分离数据库的命令如下:
exec sp_detach_db Km20051030011601
如果只需附加主数据文件(.mdf)而不包含日志文件,可使用 sp_attach_single_file_db:
exec sp_attach_single_file_db km20051030011601,'D:TestDatabaseKm20051030011601.mdf'