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

     

  • 相关阅读:
    ActiveSync合作关系对话框的配置
    WINCE对象存储区(object store)
    Wince 隐藏TASKBAR的方法
    Wince输入法换肤换语言机制
    poj 3080 Blue Jeans 解题报告
    codeforces A. Vasily the Bear and Triangle 解题报告
    hdu 1050 Moving Tables 解题报告
    hdu 1113 Word Amalgamation 解题报告
    codeforces A. IQ Test 解题报告
    poj 1007 DNA Sorting 解题报告
  • 原文地址:https://www.cnblogs.com/huyong/p/2323552.html
Copyright © 2011-2022 走看看