由于@@ServerName等问题对SQL增量升级脚本进行补充
由于@@ServerName在安装数据库之后修改了机器名的情况下,获取到的内容仍然是原来的机器名,造成数据库连接失败,
所以不能直接使用该全局变量。
此外对升级脚本的执行方式做了一下调整,将版本的判断放到子脚本去判断,调度脚本仅对子脚本进行调度。
-- 根据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 'show advanced options',1
RECONFIGURE
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)
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\XXX','Path',@Path output
-- 组装版本升级脚本的绝对路径
select @path=@path+'\服务器\BackUp\'
-- 通过serverproperty获取实例名
declare @ServerName varchar(100)
select @ServerName =cast(serverproperty('servername') as varchar(100))
-- 生成osql执行命令语句,指定SQL Server实例名,数据库名,信任连接,脚本绝对路径。
select @ppp = 'osql -S '+@ServerName+' -n -d '+@dbname+' -O -E -i '+@path --+'tt1.sql'
--print @ver
-- 批量执行约定目录中SQL升级脚本,在脚本内部判断版本号,决定是否执行。
--if @ver <'10.0.0.9'
-- exec master..xp_cmdshell @ppp
-- 通过一个临时表存放升级脚本
create table #patchlist(patchname varchar(100))
insert into #patchlist
EXEC master..xp_cmdshell 'dir '+@path+'tt*.sql /b'
--select * from #patchlist
-- 循环执行升级脚本。
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
EXEC sp_configure 'show advanced options',0
RECONFIGURE
end
GO
由于@@ServerName等问题对SQL增量升级脚本进行补充的更多相关文章
- SQL升级脚本实现按版本差异化升级(优化)
1.增加了对SQL Server 2000的兼容: 2.支持对脚本目录的批量处理: 3.将脚本版本的判断放到具体的升级子脚本中去,让调度脚本更固化. -- 根据SQL的版本好确定启用xp_cmdshe ...
- SQL升级脚本实现按版本差异化升级
目前的项目里面,升级脚本是一个SQL文件,无论软件从哪个版本升级,都会把SQL文件里面的语句全部执行一遍,这样存在两个问题: 1.SQL升级文件很庞大,几M很常见,导致文件的加载很慢: 2.重复执行脚 ...
- SQL 2008升级SQL 2008 R2完全教程或者10.00.1600升级10.50.1600
http://blog.csdn.net/feng19821209/article/details/8571571 SQL 2008升级SQL 2008 R2完全教程或者10.00.1600升级10. ...
- Mac平台与Windows平台下AndroidStudio增量升级
Android Studio增量升级什么情况下使用最合适呢? 比如现在的as版本是2.2版本,而你的as版本2.0版本,这个时候点Check For Updates就没有反应了,因为你已经2个有版本没 ...
- 待实验:Android 增量升级
参考资料: 增量升级(省流量更新)的Android客户端实现 http://blog.csdn.net/sgwhp/article/details/9009427 http://my.oschina ...
- SQL 2008升级SQL 2008 R2完全教程或者10.00.4000升级10.50.1600
今天将由于需要就将我的SQL 2008升级到SQL 2008 R2. 说到为什么要升级是因为,从另一台机器上备份了一个数据库,到我的机器上还原的时候提示“System.Data.SqlClient.S ...
- react native 增量升级方案(转)
前言 facebook的react-native给我们带来了用js写出原生应用的同时,也使得使用RN编写的代码的在线升级变得可能,终于可以不通过应用市场来进行升级,极大的提升了app修bug和赋予新功 ...
- Android增量升级的方法和原理
总结: 我们使用delta编码算法减少Android应用升级程序的大小.我们通过bsdiff和bspatch工具在android上实现delta编码算法.服务器软件和android应用已经部署.当前, ...
- Android App增量升级
移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力.说的接地气点就是,你频繁的升级更新,有时只是修复了几个bug或者微调了下界面, ...
随机推荐
- Web Components是不是Web的未来
今天 ,Web 组件已经从本质上改变了HTML.初次接触时,它看起来像一个全新的技术.Web组件最初的目的是使开发人员拥有扩展浏览器标签的能力,可以自由的进行定制组件.面对新的技术,你可能会觉得无从下 ...
- sudo service docker start
sudo service docker start sudo docker run -t -i ubuntu:14.04 /bin/bash docker ps -l CONTAINER ID IMA ...
- Oracle分组排序查询
用sql查询每个分组中amount最大的前两条记录: SELECT *FROM HW trWHERE(SELECT COUNT(*) FROM HW WHERE tr.DEPID=DEPID AND ...
- document.compatMode属性和获取鼠标的位置
document.compatMode属性 document.compatMode用来判断当前浏览器采用的渲染方式. 官方解释: BackCompat:标准兼容模式关闭.CSS1Compat:标准兼容 ...
- sql视图实例
一个视图是一个或一组SQL语句,存储在数据库中相关的名称.一个视图实际上是一个预定义的SQL查询中的表的形式组成. 一个视图可以包含一个表的所有行,或选择表中的行.从一个或多个表上写SQL查询创建一个 ...
- Linux文件管理相关命令
Linux文件管理相关命令 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux文件管理背景知识之后, 我们可以 ...
- windows下MySQL 5.7+ 解压缩版安装配置方法
方法来自伟大的互联网. 1.去官网下载.zip格式的MySQL Server的压缩包,根据需要选择x86或x64版.注意:下载是需要注册账户并登录的. 2.解压缩至你想要的位置. 3.复制解压目录下m ...
- iOS - Frame 项目架构
前言 iOS 常见的几种架构: 标签式 Tab Menu 列表式 List Menu 抽屉式 Drawer 瀑布式 Waterfall 跳板式 Springborad 陈列馆式 Gallery 旋转木 ...
- WebSocket实战之————Workerman服务器的安装启动
安装php apt-get install php5-cli root@iZ23b64pe35Z:/home/www# php -v PHP 5.5.9-1ubuntu4.20 (cli) (buil ...
- iOS FMDB的使用
简介: SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需要加入 libsqlite ...