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

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

概述   [推荐] (SqlServer)分离所有用户数据库 ——通过知识共享树立个人品牌。 在实际应用中,有时我们需要一次性分离所有用户数据库,下面给出代码,供大家参考。   USE  [ master ] GO IF  EXISTS (  SELECT  *   FROM sys.objects   WHERE  [ object_id ]  =  OBJECT_ID(N ' [dbo].[spD   

[推荐] (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 ',
          ' 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

 

 

© 2011  EricHu

原创作品,转贴请注明作者和出处,留此信息。

 

------------------------------------------------

cnBlobs:http://www.cnblogs.com/huyong/
CSDNhttp://blog.csdn.net/chinahuyong 

 

作者:EricHuDBC\SB\SWebServiceWCFPM等)
出处:http://www.cnblogs.com/huyong/

Q Q80368704   E-Mail: [email protected]
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
更多文章请看 [置顶]索引贴——(不断更新中)

总结

以上是内存溢出为你收集整理的[推荐] (SqlServer)分离所有用户数据库全部内容,希望文章能够帮你解决[推荐] (SqlServer)分离所有用户数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1179591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存