`

[推荐] (SqlServer)分离所有用户数据库

 
阅读更多

[推荐] (SqlServer)分离所有用户数据库

——通过知识共享树立个人品牌。

在实际应用中,有时我们需要一次性分离所有用户数据库,下面给出代码,供大家参考。

USE[master]
GO
IFEXISTS(SELECT*
FROMsys.objects
WHERE[object_id]=OBJECT_ID(N'[dbo].[spDetachAllUserDatabases]')
ANDtypeIN(N'P',N'PC'))
DROPPROCEDURE[dbo].[spDetachAllUserDatabases]
GO

CREATEPROCEDURE[dbo].[spDetachAllUserDatabases]
AS
BEGIN
--DeclareVariables
DECLARE@DatabaseNameVARCHAR(100)
DECLARE@MinDatabaseIDINT
DECLARE@MaxDatabaseIDINT
DECLARE@SQLVARCHAR(4000)
--Checkfortemporarytableanddropitifitexists
IFOBJECT_ID('tempDB.dbo.#Database')ISNOTNULL
DROPTABLE[#Database];

--Createtemporarytable
CREATETABLE#Database
(
IDINTIDENTITY(1,1),
DatabaseNameVARCHAR(100)
)

--Checkforexistinguserdatabases
IFEXISTS(SELECTname
FROMsys.databases
WHEREdatabase_id>4
ANDnameNOTIN('SQLDBA','ReportServer',
'ReportServerTempDB',
'distribution'))
BEGIN
--Insertalldatabasenamesintoatemporarytable
INSERTINTO#Database(DatabaseName)
SELECTname
FROMsys.databases
WHEREdatabase_id>4
ANDnameNOTIN('SQLDBA','ReportServer',
'ReportServerTempDB',
'distribution')

--SetVariablesforthedetachdatabaseloop
SELECT@MinDatabaseID=MIN(ID),
@MaxDatabaseID=MAX(ID)
FROM#Database

--Beginlooptodetachdatabases
WHILE@MinDatabaseID<=@MaxDatabaseID
BEGIN

--GetDatabaseName
SELECT@DatabaseName=DatabaseName
FROM#Database
WHEREID=@MinDatabaseID

--BuildDetachDatabaseCommand
SET@SQL='EXECsp_detach_db'+''''+@DatabaseName
+''''+';'

--TryCatchblocktoexecuteSQLandhandleerrors  
BEGINTRY

--DetachDatabase
EXEC(@SQL
)
PRINT'Detached'+@DatabaseName
ENDTRY
BEGINCATCH
SELECT@DatabaseName,
message_id,
severity,
[text],
@SQL
FROMsys.messages
WHEREmessage_id=@@ERROR
ANDlanguage_id=1033--BritishEnglish
ENDCATCH

--GetthenextDatabaseNameID
SET@MinDatabaseID=@MinDatabaseID+1

--EndLoop
END
END
END

GO

© 2011 EricHu

原创作品,转贴请注明作者和出处,留此信息。

------------------------------------------------

cnBlobs:http://www.cnblogs.com/huyong/
CSDNhttp://blog.csdn.net/chinahuyong

作者:EricHuDBC\SB\SWebServiceWCFPM等)
出处:http://www.cnblogs.com/huyong/

Q Q80368704 E-Mail: 80368704@qq.com
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
更多文章请看[置顶]索引贴——(不断更新中)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics