zoukankan      html  css  js  c++  java
  • [推荐] (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

     

  • 相关阅读:
    How to solve the problem "A project with an Output Type of Class Library cannot be started directly "
    Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
    JavaScript实现startWith、endWith效果函数
    不同格式证书导入keystore方法
    用KeyTool生成安全证书
    怎样让操作系统的虚拟机退出全屏?
    对https的理解
    JDK中keytool常用命令
    百折不回结局凄惨的金庸反角
    主题数据库的特征
  • 原文地址:https://www.cnblogs.com/huyong/p/2323552.html
Copyright © 2011-2022 走看看