zoukankan
html css js c++ java
批量分离和附加数据库
use
master
go
declare
@detach
nvarchar
(
4000
)
set
@detach
=
''
select
@detach
=
@detach
+
char
(
13
)
+
'
exec sp_detach_db
'
+
quotename
(Name)
+
'
,
''
true
'''
from
master..sysdatabases
where
Name
like
'
Lonigo%
'
and
dbid
>
4
exec
(
@detach
)
--
EXEC sp_detach_db '+ @name+', '+ 'true'
go
use
master
go
/**/
/*
**********************************************************************************************************************
說明:@file顯示格式為' E:\data',路徑有空格時加上雙引號如:'E:\"Data bak"'
禁止數據庫名為'.'圓點。如:HR.hr.mdf/HR.hr.ldf 在文件名存在兩個圓點
功能:附加數據庫
**********************************************************************************************************************
*/
create
proc
DataAttach (
@file
nvarchar
(
100
),
@file1
nvarchar
(
100
)
=
@file
)
as
declare
@mdf1
nvarchar
(
200
),
@mdf2
nvarchar
(
200
),
@ldf1
nvarchar
(
200
),
@ldf2
nvarchar
(
200
)
select
@mdf1
=
'
dir /b/o/s
'
+
@file
+
'
*.mdf
'
,
@ldf1
=
'
dir /b/o/s
'
+
@file1
+
'
*.ldf
'
,
@mdf2
=
'
dir /b/o
'
+
@file
+
'
*.mdf
'
,
@ldf2
=
'
dir /b/o
'
+
@file1
+
'
*.ldf
'
if
object_id
(
'
tempdb..#ta
'
)
is
not
null
drop
table
#ta
create
table
#ta(ID
int
identity
(
1
,
1
),FName
nvarchar
(
256
),DataName
nvarchar
(
256
))
insert
#ta(FName)
exec
master..xp_cmdshell
@mdf1
insert
#ta(FName)
exec
master..xp_cmdshell
@ldf1
if
object_id
(
'
tempdb..#tb
'
)
is
not
null
drop
table
#tb
create
table
#tb(ID
int
identity
(
1
,
1
),FName
nvarchar
(
256
))
insert
#tb(FName)
exec
master..xp_cmdshell
@mdf2
insert
#tb(FName)
exec
master..xp_cmdshell
@ldf2
--
EXECUTE master.dbo.xp_fileexist N'E:LonigoBrandAgencyLonigoBrandAgency_Data.MDF'
update
a
set
DataName
=
b.FName
from
#ta a
join
#tb b
on
reverse
(
left
(
reverse
(a.FName),
charindex
(
'
'
,
reverse
(a.FName))
-
1
))
=
b.FName
update
#ta
set
DataName
=
case
when
charindex
(
'
_
'
,DataName)
>
0
then
case
when
reverse
(
left
(
reverse
(DataName),
charindex
(
'
_
'
,
reverse
(DataName))
-
1
))
in
(
'
Data.MDF
'
,
'
log.LDF
'
)
then
reverse
(
stuff
(
reverse
(DataName),
1
,
charindex
(
'
_
'
,
reverse
(DataName)),
''
))
else
reverse
(
stuff
(
reverse
(DataName),
1
,
charindex
(
'
.
'
,
reverse
(DataName)),
''
))
end
else
left
(DataName,
charindex
(
'
.
'
,DataName)
-
1
)
end
if
(
select
count
(
1
)
from
#ta a
where
exists
(
select
1
from
master..sysdatabases
where
Name
=
a.DataName))
>
0
begin
declare
@error
nvarchar
(
1000
)
select
@error
=
isnull
(
@error
+
'
,
'
,
''
)
+
DataName
from
#ta a
where
exists
(
select
1
from
master..sysdatabases
where
Name
=
a.DataName)
group
by
DataName
print
'
已存在數據庫
'
+
@error
end
if
1
>
0
begin
declare
@s
nvarchar
(
4000
),
@s1
nvarchar
(
4000
)
set
@s
=
''
select
@s
=
@s
+
char
(
13
)
+
'
EXEC sp_attach_db @dbname = N
'
+
quotename
(DataName,
''''
)
+
'
, @filename1 = N
'''
+
max
(
case
when
FName
like
'
%.MDF
'
then
FName
else
''
end
)
+
'''
, @filename2 = N
'''
+
max
(
case
when
FName
like
'
%.LDF
'
then
FName
else
''
end
)
+
''''
,
@s1
=
isnull
(
@s1
,
''
)
+
DataName
+
char
(
13
)
from
#ta ta
where
FName
is
not
null
and
(
select
count
(
1
)
from
#ta tc
where
DataName
=
ta.DataName)
=
2
--
記錄為2
and
not
exists
(
select
1
from
master..sysdatabases
where
Name
=
ta.DataName)
group
by
DataName
--
print @s
exec
(
@s
)
end
if
@@error
<>
0
print
'
附加失敗
'
+
char
(
13
)
+
@s1
else
print
'
附加成功
'
+
char
(
13
)
+
@s1
go
select
*
from
#ta
--
exec DataAttach 'E:\LonigoData'
查看全文
相关阅读:
java 中 this 和 super 说明及在构造器中super()和this()相互调用执行顺序
Java中get()方法和set()方法如何使用?
java中如何在键盘中输入一串数字然后存入数组中?
修改阿里云服务器主机名称
flask第一个页面
爬取汽车之家新闻的数据
冒泡排序
爬取简书
Mac Flask-Migrate 安装出现错误
C++__ 判断和循环
原文地址:https://www.cnblogs.com/Roy_88/p/5463110.html
最新文章
@ModelAttribute
计算机读写操作原理
mysql的utf8
C# 抽象类和接口的使用
.Net 线程&异步
Rx .Net 简介
Ado .Net 基础总结
C#操作IIS工具类(包含创建Web子程序相关方法)
C#-设计模式-责任链模式
Web Api 简单例子(WebApi+MongoDB+Knockoutjs)
热门文章
C#-设计模式-迭代器模式
C#-设计模式-外观模式
C#-设计模式-状态模式
【HTTP】请求的过程与原理
windows性能计数器(二)
Windows常用性能计数器总结(一)
简单谈谈java中匿名内部类构造函数?
Java中Set真的是无序的吗?
java中length和length()的区别?
Eclipse常用快捷键
Copyright © 2011-2022 走看看