由于@@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='00008'

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

 

你可能感兴趣的:(server)