由于@@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增量升级脚本进行补充的更多相关文章

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

    1.增加了对SQL Server 2000的兼容: 2.支持对脚本目录的批量处理: 3.将脚本版本的判断放到具体的升级子脚本中去,让调度脚本更固化. -- 根据SQL的版本好确定启用xp_cmdshe ...

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

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

  3. 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. ...

  4. Mac平台与Windows平台下AndroidStudio增量升级

    Android Studio增量升级什么情况下使用最合适呢? 比如现在的as版本是2.2版本,而你的as版本2.0版本,这个时候点Check For Updates就没有反应了,因为你已经2个有版本没 ...

  5. 待实验:Android 增量升级

    参考资料: 增量升级(省流量更新)的Android客户端实现  http://blog.csdn.net/sgwhp/article/details/9009427 http://my.oschina ...

  6. SQL 2008升级SQL 2008 R2完全教程或者10.00.4000升级10.50.1600

    今天将由于需要就将我的SQL 2008升级到SQL 2008 R2. 说到为什么要升级是因为,从另一台机器上备份了一个数据库,到我的机器上还原的时候提示“System.Data.SqlClient.S ...

  7. react native 增量升级方案(转)

    前言 facebook的react-native给我们带来了用js写出原生应用的同时,也使得使用RN编写的代码的在线升级变得可能,终于可以不通过应用市场来进行升级,极大的提升了app修bug和赋予新功 ...

  8. Android增量升级的方法和原理

    总结: 我们使用delta编码算法减少Android应用升级程序的大小.我们通过bsdiff和bspatch工具在android上实现delta编码算法.服务器软件和android应用已经部署.当前, ...

  9. Android App增量升级

    移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力.说的接地气点就是,你频繁的升级更新,有时只是修复了几个bug或者微调了下界面, ...

随机推荐

  1. nodejs学习笔记

    这里有一段废话,我写了又删,删了又写,反复了十来次,最后还是把它删除了.不用想了,那是一段牢骚话兼有煽情意思. 好了,还是把我学习nodejs的笔记记录下来吧,一来复习巩固,加深印象,二来自己实践中出 ...

  2. jQuery 选择器 (基础恶补)

    jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") ...

  3. maven+swagger

    maven+swagger 构建restful风格的应用服务确实很好用 maven来管理jar包 swagger提供接口文档和测试接口

  4. 【转】DQL、DML、DDL、DCL的概念与区别

    转自 http://blog.csdn.net/tomatofly/article/details/5949070 SQL(Structure Query Language)语言是数据库的核心语言. ...

  5. RAM与ROM

    随着对计算机行业的深入了解,很多人开始听到一些RAM和ROM的讨论话题,之前我也不是很清楚,也不知道他和电脑的内存有什么联系.下面就让我们一起来学习一下这个吧. 首先RAM和ROM是什么 RAM和RO ...

  6. less文件转换为css文件

    Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 本文主要介绍less文件如何转化为css文件. ...

  7. Windows下WebStorm使用SVN

    安装了phpstorm之后,想配置svn,结果在file->settings->Version Contorl->subversion->use conmand line cl ...

  8. WebRequest使用

    // 待请求的地址 string url = "http://www.cnblogs.com"; // 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求 ...

  9. Bootstrap_响应式网格系统

    首先添加CSS样式: [class *= col-]{ background-color: #eee; border: 1px solid #ccc; } [class *= col-] [class ...

  10. cocos2dx 动画显示异常

    最近遇到一个问题 好多cocostudio导出的动画 显示都会有异常 很明显的融合方式 把混合方式里面的 src 改成one dst 改成 one-src alpha 解决 后面附上同行的文章 浅显易 ...