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