zoukankan      html  css  js  c++  java
  • SQL升级脚本实现按版本差异化升级(优化)

    1.增加了对SQL Server 2000的兼容;

    2.支持对脚本目录的批量处理;

    3.将脚本版本的判断放到具体的升级子脚本中去,让调度脚本更固化。

    -- 根据SQL的版本好确定启用xp_cmdshell的方式。
    declare @DBVersion varchar(50)
    select @DBVersion= cast(serverproperty('productversion') as varchar(50))
    declare @index int
    select @index = charindex('.',@DBVersion)
    select @DBVersion = substring(@DBVersion,1,@index-1)
    -- 如果是2000及其以下版本
    if cast(@DBVersion as integer) <=8
    begin
        if not exists(select id from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell')
            exec master..sp_addextendedproc 'xp_cmdshell','xplog70.dll'
    end
    else
    begin
        EXEC sp_configure 'xp_cmdshell', 1
        RECONFIGURE
    end
    GO
    
    -- 获取当前的数据名
    declare @dbname varchar(100)
    select @dbname= db_name()
    -- 获取当前数据库的版本号
    declare @ver varchar(100)
    select @ver = s_content from systeminfo where s_fullid='00008'
    declare @ppp varchar(2000)
    -- 从注册表获取软件的安装路径
    declare @Path varchar(1000)
    declare @FileFullName varchar(1000)
    declare @DicPath varchar(1000)
    -- XXX是应用程序写入注册表的节点名称
    exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowsCurrentVersionApp PathsXXX','Path',@Path output
    -- 组装版本升级脚本的绝对路径
    select @FileFullName=@path+'服务器SQL'
    -- 生成osql执行命令语句,指定SQL Server实例名,数据库名,信任连接,脚本绝对路径。
    select @ppp = 'osql -S '+@@ServerName+' -n -d '+@dbname+' -O -E -i '+@FileFullName     
    -- 升级脚本路径
    select @DicPath = 'dir '+@FileFullName+'tt*.sql /b'
    -- 通过一个临时表存放升级脚本
    create table #patchlist(patchname varchar(100))
    insert into #patchlist
    EXEC master..xp_cmdshell @DicPath
    -- 循环执行升级脚本。
    declare @FileName    varchar(100)
    DECLARE patchs CURSOR FOR SELECT patchname FROM #patchlist
    OPEN patchs
    FETCH NEXT FROM patchs into @FileName
    WHILE @@FETCH_STATUS = 0
    begin
        if isnull(@FileName,'') <> ''
        begin
            select @FileName = @ppp+@FileName
            exec master..xp_cmdshell @FileName
        end
        FETCH NEXT FROM patchs into @FileName    
    end
    drop table #patchlist
    close patchs
    deallocate patchs
    GO
    -- 根据SQL的版本号确定关闭xp_cmdshell的方式。
    declare @DBVersion varchar(50)
    select @DBVersion= cast(serverproperty('productversion') as varchar(50))
    declare @index int
    select @index = charindex('.',@DBVersion)
    select @DBVersion = substring(@DBVersion,1,@index-1)
    if cast(@DBVersion as integer) <=8
    begin
        if exists(select id from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell')
            Exec master..sp_dropextendedproc 'xp_cmdshell'
    end
    else
    begin
        EXEC sp_configure 'xp_cmdshell', 0
        RECONFIGURE
    end
    GO
  • 相关阅读:
    HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者
    博弈论小结
    HDU 2149 Public Sale
    有上下界限制的网络流-总结
    loj #117. 有源汇有上下界最小流
    jquery中not的用法[.not(selector)]
    Assert随笔
    Maps.newHashMapWithExpectedSize(2)
    java1.8操作日期
    控制input只输入数字--- onkeyup="value=value.replace(/[^d]/g,'')"
  • 原文地址:https://www.cnblogs.com/codingnote/p/3237783.html
Copyright © 2011-2022 走看看