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
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 数的统计
    Java实现 蓝桥杯VIP 算法训练 和为T
    Java实现 蓝桥杯VIP 算法训练 友好数
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 暗恋
    Java实现 蓝桥杯VIP 算法训练 暗恋
    测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留
    RichEdit 各个版本介绍
  • 原文地址:https://www.cnblogs.com/codingnote/p/3237783.html
Copyright © 2011-2022 走看看