说说数据库批量更新维护
创始人
2024-07-30 06:31:06
0

 情况:多台数据库服务器,每台服务器多个数据库,数据库结构一致(提供给不同客户使用)

一、手工操作

1、数据库少

下拉列表选择不同数据库,执行更新脚本sql.数据库少,操作感觉不到麻烦。

2、数据库多

下拉列表选择不同数据库,操作麻烦,容易遗漏更新数据库。

SQL Server Management Studio这个下拉列表,还不支持拉大缩小,数据库多了去选择不同数据库相当够呛。

二、半自动

思路:先更新一个数据库(NEWNEW),比如更新了存储过程AddSaleOrder和DeleteSaleOrder, 和执行一段sql(DELETE FROM dbo.SystemConfig WHERE ConfigName='A'),然后通过sql参照这个数据库更新同台服务器的其他数据库。

  1. USE [NEWNEW]  
  2. DECLARE @name SYSNAME  
  3. DECLARE userDB CURSOR FOR select name from master.dbo.sysdatabases WHERE SID <> 0x01  
  4. OPEN userDB  
  5. FETCH NEXT FROM userDB INTO @name 
  6. WHILE (@@FETCH_STATUS = 0)  
  7.    BEGIN 
  8.        EXEC('use [' + @name + '] IF (EXISTS(SELECT 1 FROM dbo.sysobjects o WHERE o.NAME = ''Customer'' AND o.xtype = ''U'')) BEGIN PRINT ''' + @name + ''' END')  
  9.        FETCH NEXT FROM userDB INTO @name 
  10.    END 
  11. CLOSE userDB  
  12. DEALLOCATE userDB 

假如输出:

  1. DB1  
  2.  
  3. DB2  
  4.  
  5. DB3 

获取一台服务器上的所有自定义数据库,select name from master.dbo.sysdatabases WHERE SID <> 0x01
通过游标再次再次过滤需要的自定义数据库(一个特殊的对象,比如:Customer表)

生成批量更新数据库的脚本:

  1. USE [NEWNEW]  
  2. DECLARE @objectID INT 
  3. DECLARE @objectName SYSNAME  
  4. DECLARE @ObjectType CHAR(2)  
  5. DECLARE @text VARCHAR(MAX)  
  6. DECLARE @dbName SYSNAME  
  7. DECLARE getName CURSOR SCROLL FOR select name from master.dbo.sysdatabases WHERE SID <> 0x01 AND NAME IN ('DB1' ,'DB2' ,'DB3')  
  8. OPEN getName  
  9. DECLARE getObj CURSOR FOR SELECT o.id, o.[name], o.xtype FROM dbo.sysobjects o WHERE o.NAME IN ('AddSaleOrder' ,'DeleteSaleOrder') AND o.xtype IN ('P', 'FN', 'V')  
  10. OPEN getObj  
  11. FETCH NEXT FROM  getObj INTO @objectID, @objectName, @ObjectType  
  12. WHILE (@@FETCH_STATUS = 0)  
  13.      BEGIN 
  14.           SET @text = '' 
  15.           SELECT @text = @text + s.[text] FROM dbo.syscomments s WHERE s.id = @objectID  
  16.           FETCH FIRST FROM getName INTO @dbName  
  17.           WHILE (@@FETCH_STATUS = 0)  
  18.                BEGIN 
  19.                    IF (@dbName = 'DB1')  
  20.                        USE [DB1]  
  21.                    ELSE IF (@dbName = 'DB2')  
  22.                        USE [DB2]  
  23.                    ELSE IF (@dbName = 'DB3')  
  24.                        USE [DB3]  
  25.                    IF (EXISTS(SELECT 1 FROM dbo.sysobjects o WHERE o.NAME = @objectName AND o.xtype = @ObjectType))  
  26.                        BEGIN 
  27.                          IF (@ObjectType = 'P')  
  28.                             EXEC ('DROP PROCEDURE dbo.' + @objectName)  
  29.                          ELSE IF(@ObjectType = 'V')  
  30.                             EXEC ('DROP VIEW dbo.' + @objectName)  
  31.                          ELSE IF(@ObjectType = 'FN')  
  32.                             EXEC ('DROP FUNCTION dbo.' + @objectName)  
  33.                        END 
  34.                    EXEC (@text)  
  35.                    EXEC ('DELETE FROM dbo.SystemConfig WHERE ConfigName=''A''')  
  36.                    USE [NEWNEW]  
  37.                    FETCH NEXT FROM getName INTO @dbName  
  38.                END 
  39.           FETCH NEXT FROM getObj INTO @objectID, @objectName, @ObjectType  
  40.      END 
  41. CLOSE getObj  
  42. DEALLOCATE getObj  
  43. CLOSE getName  
  44. DEALLOCATE getName 

dbo.syscomments存储的存储过程脚本,如果脚本字符超过4000字符,会多行存储。@text = @text + s.[text]累加得到脚本,没个对象更新时SET @text = '',清除

辅助winform:

 

源代码下载:http://files.cnblogs.com/yinyunpan/WangshijieTool.rar

3、自动

向大家请教了。。。

原文链接:http://www.cnblogs.com/yinyunpan/archive/2011/05/26/2057945.html

【编辑推荐】

  1. Mongodb源码分析--内存文件映射(MMAP)
  2. 走进MongoDB的世界 展开MongoDB的学习之旅
  3. 浅析Mongodb源码之游标Cursor
  4. 野心勃勃的NoSQL新贵 MongoDB应用实战
  5. Mongodb源码分析之Mongos分析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...