sql语句附加分离数据库

当使用 sp_attach_db 系统存储过程附加数据库时- - 
Tag: 当使用 sp_attach_db 系统存储过程附加数据库时 
//附加数据库 
sp_attach_db 
当使用 sp_attach_db 系统存储过程附加数据库时。 

sp_attach_db:将数据库附加到服务器。 
语法 
sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ] 

参数 
[@dbname =] 'dbname' 
要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。 

[@filename1 =] 'filename_n' 

数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。 
参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。 
该列表还必须包括数据库分离后所有被移动的文件。 

返回代码值:0(成功)或 1(失败) 


eg:下面的示例将 pubs 中的两个文件附加到当前服务器。 

EXEC sp_attach_db @dbname = N'pubs', 
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' 

EXEC sp_attach_db @dbname = N'Ty20051029101451aaa', 
@filename1 = N'd:\5屏幕\Ty20051029101451aaa_data.mdf', 
@filename2 = N'd:\5屏幕\Ty20051029101451aaa_log.ldf' 
---解决问题了 

//删除数据库 
DROP DATABASE 
从Microsoft? SQL Server? 删除一个或多个数据库。删除数据库将删除数据库所使用的数据库文件和磁盘文件。 

语法 :DROP DATABASE database_name [ ,...n ] 

参数 :database_name 指定要删除的数据库名称。从 master 数据库中执行 sp_helpdb 以查看数据库列表。 
eg: exec sp_helpdb database_name 

exec Drpo DataBase [Ty20051029101451aaa] 

//分离数据库 
可以使用 sp_detach_db 存储过程分离该数据库,然后使用带有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。 
sp_detach_db Archive 
GO 
CREATE DATABASE Archive 
ON PRIMARY (FILENAME = 'c:\program files\microsoft sqlserver\mssql\data\archdat1.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 Settings\Administrator\桌面\帐套\data\Template.Dat' 
ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE 

exec sp_detach_db Km20051030011601 --分离数据库 
exec sp_attach_single_file_db km20051030011601,'D:\TestDatabase\Km20051030011601.mdf'--只附加.mdf文件


--kill所有会话 
use master 
go 

Declare @tblConnectedUsers Table (SPIDint) 
Declare @vcSQLText varchar(200), 
@iSPIDint, 
@dbName varchar(20) --数据库名 

set @dbName='数据库名' 

Insert into @tblConnectedUsers 
Select p.spid 
from master.dbo.sysprocesses p (nolock) 
join master..sysdatabases d (nolock) on p.dbid = d.dbid 
Where d.[name] = @dbName 

While 1 = 1 
Begin 

Select top 1 @iSPID = SPID 
From @tblConnectedUsers 
Where SPID > IsNull(@iSPID, 0) 
order by SPID asc 

If @@RowCount = 0 
Break 

Set @vcSQLText = 'Kill ' + Convert(varchar(10), @iSPID) 
Exec( @vcSQLText ) 
End 


--分离数据库 
EXEC sp_detach_db @dbName, 'true'

 

 

--创建存储过程: 
create proc killspid(@dbname varchar(20)) 
as 
begin 
declare @sql nvarchar(500) 
declare @spid int 
set @sql='declare getspid cursor for 
select spid from sysprocesses where dbid=db_id('''+@dbname+''')' 
exec (@sql) 
open getspid 
fetch next from getspid into @spid 
while @@fetch_status <>-1 
begin 
exec('kill'+@spid) 
fetch next from getspid into @spid 
end 
close getspid 
deallocate getspid 
end 
--执行存储过程: 
exec killspid 'dbname'

转载于:https://www.cnblogs.com/lzj1981/archive/2013/04/29/3050541.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值