不说废话,大牛初始亦菜鸟,成功之路贵执行,马上行动!如果想获得更优质的显示效果,请在Chrome、Firefox等现代浏览器浏览本站。

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

:: 数据库精典 EricHu 779℃ 0评论

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

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

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

 

USE [master]
GO
IF EXISTS ( SELECT *
 FROM sys.objects
 WHERE [object_id] = OBJECT_ID(N[dbo].[spDetachAllUserDatabases])
 AND type IN ( NP, NPC ) ) 
 DROP PROCEDURE [dbo].[spDetachAllUserDatabases]
GO

CREATE PROCEDURE [dbo].[spDetachAllUserDatabases]
AS 
 BEGIN
     Declare Variables
     DECLARE @DatabaseName VARCHAR(100)
     DECLARE @MinDatabaseID INT
     DECLARE @MaxDatabaseID INT
     DECLARE @SQL VARCHAR(4000)
     Check for temporary table and drop it if it exists
     IF OBJECT_ID(tempDB.dbo.#DatabaseIS NOT NULL 
     DROP TABLE [#Database];

     Create temporary table
     CREATE TABLE #Database
     (
     ID INT IDENTITY(11),
     DatabaseName VARCHAR(100)
     )
     
     Check for existing user databases
     IF EXISTS ( SELECT name
     FROM sys.databases
     WHERE database_id > 4
     AND name NOT IN ( SQLDBAReportServer,
     ReportServerTempDB,
     distribution ) ) 
     BEGIN 
         Insert all database names into a temporary table
         INSERT INTO #Database ( DatabaseName )
         SELECT name
         FROM sys.databases
         WHERE database_id > 4
         AND name NOT IN ( SQLDBAReportServer,
         ReportServerTempDB,
         distribution ) 
         
         Set Variables for the detach database loop 
         SELECT @MinDatabaseID = MIN(ID),
         @MaxDatabaseID = MAX(ID)
         FROM #Database
        
         Begin loop to detach databases
         WHILE @MinDatabaseID <= @MaxDatabaseID
         BEGIN
         
         Get DatabaseName
         SELECT @DatabaseName = DatabaseName
         FROM #Database
         WHERE ID = @MinDatabaseID
         
         Build Detach Database Command
         SET @SQL = EXEC sp_detach_db  + ”” + @DatabaseName
         + ”” + ;

         Try Catch block to execute SQL and handle errors  
         BEGIN TRY

         Detach Database
         EXEC ( @SQL
         )
         PRINT Detached  + @DatabaseName
         END TRY
         BEGIN CATCH
         SELECT @DatabaseName,
         message_id,
         severity,
         [text],
         @SQL
         FROM sys.messages
         WHERE message_id = @@ERROR
         AND language_id = 1033 British English
         END CATCH

         Get the next DatabaseName ID
         SET @MinDatabaseID = @MinDatabaseID + 1
         
         End Loop
         END
     END
 END

GO

 

转载请注明:RDIFramework.NET » [推荐] (SqlServer)分离所有用户数据库

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址