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=''
declare @ppp varchar(2000)
-- 从注册表获取软件的安装路径
declare @Path varchar(1000)
declare @FileFullName varchar(1000)
declare @DicPath varchar(1000)
-- XXX是应用程序写入注册表的节点名称
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\XXX','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

SQL升级脚本实现按版本差异化升级(优化)的更多相关文章

  1. SQL升级脚本实现按版本差异化升级

    目前的项目里面,升级脚本是一个SQL文件,无论软件从哪个版本升级,都会把SQL文件里面的语句全部执行一遍,这样存在两个问题: 1.SQL升级文件很庞大,几M很常见,导致文件的加载很慢: 2.重复执行脚 ...

  2. asp.net 版本一键升级,后台直接调用升级脚本

    应客户需求,要求实现一个版本一键升级的功能,咨询过同事之后弄了个demo出来,后台代码如下: //DBConnModelInfo:连接字符串的对象 (包含数据库实例名,数据库名,登陆名,登陆密码) p ...

  3. LNMP1.4 PHP升级脚本

    升级PHP前,请确认你的网站程序是否支持升级到的PHP版本,防止升级到网站程序不兼容的PHP版本,具体可以去你使用的PHP程序的官网查询相关版本支持信息.v1.3及以后版本大部分情况下也可以进行降级操 ...

  4. 从CentOS 7.0升级到7.7版本

    我平时都在VirtualBox上装虚拟机,方法是导入ova镜像文件,比如导入从网上下载的CentOS7-base.ova,该ova为CentOS 7.0版本,而现在最新版本为7.7,为此进入系统后第一 ...

  5. LNMP PHP升级脚本

    升级PHP前,请确认你的网站程序是否支持升级到的PHP版本,防止升级到网站程序不兼容的PHP版本,具体可以去你使用的PHP程序的官网查询相关版本支持信息.v1.3及以后版本大部分情况下也可以进行降级操 ...

  6. 由于@@ServerName等问题对SQL增量升级脚本进行补充

    由于@@ServerName在安装数据库之后修改了机器名的情况下,获取到的内容仍然是原来的机器名,造成数据库连接失败, 所以不能直接使用该全局变量. 此外对升级脚本的执行方式做了一下调整,将版本的判断 ...

  7. 无法升级数据库....因为此版本的 SQL Server 不支持该数据库的非发布版本(539) 解决方案

    使用SQL2012附加一个数据库时报出了以下错误:“无法升级数据库....因为此版本的 SQL Server 不支持该数据库的非发布版本(539).不能打开与此版本的 sqlserver.exe 不兼 ...

  8. 出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误

    出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误:org.hibernate.MappingException: No Di ...

  9. CENTOS 7 升级内核版本(附带升级脚本)

    写在前面的话 对于系统而言,除非是那种安全性要求非常高的公司或者经常会有第三方安全机构对其漏洞扫描的才容易涉及到系统的内核升级,比如之前呆过一个公司,因为需要做三级等保的原因,就会涉及到系统扫描,这时 ...

随机推荐

  1. 自定义view 画圆

    package com.exaple.day01rikao; import android.content.Context; import android.graphics.Canvas; impor ...

  2. Bitnami redmine备份升级步骤

    从3.2.1升级至3.3.0,不确定数据库结构是否有变化,主要过程:先停止服务,安装redmine模块,恢复服务. 以下适用于windows操作系统,采用Bitnami安装方式: 1.完整备份 Fol ...

  3. Digital Roots 1013

    Digital Roots 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:456            测试通过:162 描述 T ...

  4. [课程设计]Scrum 2.0 多鱼点餐系统开发进度(第二阶段项目构思与任务规划)

    [课程设计]Scrum 2.0 多鱼点餐系统开发进度 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB ...

  5. 解读HTML 5新语法 提高语义价值

    HTML 5的新标记 设计者们需要完成的任务是要给HTML 5开发一个更丰富的和更有含义的语义,当然可以想象这种新方案将会是很灵活和很高效的,同时与所有的现代互联网标准相适应.下面就是一些将要在HTM ...

  6. Android EditText 密码框默认是小圆点 怎么改成其它的(*)?

    text.setTransformationMethod(new AsteriskPasswordTransformationMethod()); public class AsteriskPassw ...

  7. # TypeScript 中如何确保 this 的正确性

    问题 在 TS 里面 this 关键字一开始让我这个写 C# 的十分惊讶,比如下面的一段代码,注意 initBinding 方法 class Company { id:number; /** * 在点 ...

  8. [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)

    树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...

  9. QT笔记之VS开发添加类

    1. 2. 3.

  10. [问题2014S15] 解答

    [问题2014S15]  解答 任取 \(OA\) 的特征值 \(\lambda\in\mathbb{C}\) 以及对应的特征向量 \(0\neq\xi=(x_1,x_2,\cdots,x_n)'\i ...