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=''
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升级脚本实现按版本差异化升级(优化)的更多相关文章
- SQL升级脚本实现按版本差异化升级
目前的项目里面,升级脚本是一个SQL文件,无论软件从哪个版本升级,都会把SQL文件里面的语句全部执行一遍,这样存在两个问题: 1.SQL升级文件很庞大,几M很常见,导致文件的加载很慢: 2.重复执行脚 ...
- asp.net 版本一键升级,后台直接调用升级脚本
应客户需求,要求实现一个版本一键升级的功能,咨询过同事之后弄了个demo出来,后台代码如下: //DBConnModelInfo:连接字符串的对象 (包含数据库实例名,数据库名,登陆名,登陆密码) p ...
- LNMP1.4 PHP升级脚本
升级PHP前,请确认你的网站程序是否支持升级到的PHP版本,防止升级到网站程序不兼容的PHP版本,具体可以去你使用的PHP程序的官网查询相关版本支持信息.v1.3及以后版本大部分情况下也可以进行降级操 ...
- 从CentOS 7.0升级到7.7版本
我平时都在VirtualBox上装虚拟机,方法是导入ova镜像文件,比如导入从网上下载的CentOS7-base.ova,该ova为CentOS 7.0版本,而现在最新版本为7.7,为此进入系统后第一 ...
- LNMP PHP升级脚本
升级PHP前,请确认你的网站程序是否支持升级到的PHP版本,防止升级到网站程序不兼容的PHP版本,具体可以去你使用的PHP程序的官网查询相关版本支持信息.v1.3及以后版本大部分情况下也可以进行降级操 ...
- 由于@@ServerName等问题对SQL增量升级脚本进行补充
由于@@ServerName在安装数据库之后修改了机器名的情况下,获取到的内容仍然是原来的机器名,造成数据库连接失败, 所以不能直接使用该全局变量. 此外对升级脚本的执行方式做了一下调整,将版本的判断 ...
- 无法升级数据库....因为此版本的 SQL Server 不支持该数据库的非发布版本(539) 解决方案
使用SQL2012附加一个数据库时报出了以下错误:“无法升级数据库....因为此版本的 SQL Server 不支持该数据库的非发布版本(539).不能打开与此版本的 sqlserver.exe 不兼 ...
- 出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误
出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误:org.hibernate.MappingException: No Di ...
- CENTOS 7 升级内核版本(附带升级脚本)
写在前面的话 对于系统而言,除非是那种安全性要求非常高的公司或者经常会有第三方安全机构对其漏洞扫描的才容易涉及到系统的内核升级,比如之前呆过一个公司,因为需要做三级等保的原因,就会涉及到系统扫描,这时 ...
随机推荐
- 本地json文件的编辑器,node-webkit开发的exe程序
首发:个人博客,更新&纠错&回复 在昨天的dota契合度计算器中,用到了dota英雄数据和dota玩家数据这两个数据库,为了便于网页应用使用,这两个数据库的存储格式是json,即her ...
- Codeforces 749C:Voting(暴力模拟)
http://codeforces.com/problemset/problem/749/C 题意:有n个人投票,分为 D 和 R 两派,从1~n的顺序投票,轮到某人投票的时候,他可以将对方的一个人K ...
- 错误,这个如何解决呢?内存溢出的问提。把JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 还是不行
java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at ja ...
- Android 进阶 Android 中的 IOC 框架 【ViewInject】 (下)
上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...
- 思科Cisco 2960系列交换机配置命令
配置密码: 2960>en :第一次密码为空 2960h#conf t :进入全局配置模式 2960(config)#hostname swa :设置交换机名 2960(config)#enab ...
- centos中安装mysql数据库
1.查看是否已有mysql数据库: #rpm -qa |grep mysql 命令返回空,说明没有安装成功. 2.安装mysql yum install mysql* 安装完成后,却发现只安装了JDB ...
- Spring 定时任务2
转载自http://www.cnblogs.com/nick-huang/p/4864737.html > 版本说明 <dependencies> <dependency> ...
- SQL疑难杂症【4 】大量数据查询的时候避免子查询
前几天发现系统变得很慢,在Profiler里面发现有的SQL执行了几十秒才返回结果,当时的SQL如下: 可以看得出来,在652行用了子查询,恰巧目标表(QS_WIP)中的记录数为100000000+, ...
- [资源] Open source packages on SLAM
OpenSLAM http://openslam.org/ Most main stream open source slam resource can be found on OpenSLAM, w ...
- 深入浅出设计模式——代理模式(Proxy Pattern)
模式动机在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用.代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到 ...