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


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

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

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

     

    USE [master]
    GO
    IF EXISTS ( SELECT *
     FROM sys.objects
     WHERE [object_id] = OBJECT_ID(N'[dbo].[spDetachAllUserDatabases]')
     AND type IN ( N'P', N'PC' ) ) 
     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.#Database'IS 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 ( 'SQLDBA''ReportServer',
         '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 ( 'SQLDBA''ReportServer',
             '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

     

  • 相关阅读:
    [转]C# ReportViewer报表 详解
    [转]Java NIO原理图文分析及代码实现
    [转]C#泛型编程
    [转]ASP.NET页面基本对象
    [转]C#中抽象类和接口的异同
    [转]Android进程间通信消息机制及IPC机制实现
    [转]左连接和右连接的区别
    [转]C# 4.0 新特性
    [转]UML类图java代码实现
    [转]Using The Entity Framework With WCF
  • 原文地址:https://www.cnblogs.com/huyong/p/2323552.html
Copyright © 2020-2023  润新知