[推荐] (SqlServer)分离所有用户数据库
[推荐] (SqlServer)分离所有用户数据库 ——通过知识共享树立个人品牌。 在实际应用中,有时我们需要一次性分离所有用户数据库,下面给出代码,供大家参考。 USE [ master ] GO IF EXISTS( SELECT * FROMsys.objects WHERE [ object_id ] = OBJECT_ID(N ' [dbo].[spDetachAllUserDatabases] ') ANDtype IN(N ' P ',N ' PC ')) DROP PROCEDURE [ dbo ]. [ spDetachAllUserDatabases ] GO CREATE PROCEDURE [ dbo ]. [ spDetachAllUserDatabases ] AS BEGIN -- DeclareVariables DECLARE @DatabaseName VARCHAR( 100) DECLARE @MinDatabaseID INT DECLARE @MaxDatabaseID INT DECLARE @SQL VARCHAR( 4000) -- Checkfortemporarytableanddropitifitexists IF OBJECT_ID( ' tempDB.dbo.#Database ') IS NOT NULL DROP TABLE [ #Database ]; -- Createtemporarytable CREATE TABLE# Database ( ID INT IDENTITY( 1,1), DatabaseName VARCHAR( 100) ) -- Checkforexistinguserdatabases IF EXISTS( SELECTname FROMsys.databases WHEREdatabase_id > 4 ANDname NOT IN( ' SQLDBA ',' ReportServer ', ' ReportServerTempDB ', ' distribution ')) BEGIN -- Insertalldatabasenamesintoatemporarytable INSERT INTO# Database(DatabaseName) SELECTname FROMsys.databases WHEREdatabase_id > 4 ANDname NOT IN( ' SQLDBA ', ' 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/ 作者:EricHu(DB、CS、BS、WebService、WCF、PM等) Q Q:80368704 E-Mail: 80368704@qq.com (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |