目前正在规划并实施开发一套ERP软件,数据库规范做了一个挑整,全小写带下杠调整为驼峰结构。
因本人全库最多两杠字段,以下执行为2杠替换驼峰结构
框架架构借用了前人所发内容
替换驼峰结构为本人思考测试应用
declare @旧列名 varchar(500),@新列名 varchar(500)
select @旧列名='token_create_time'--,@新列名='新列名'
--select CHARINDEX ( '_' ,'aa_bb_cc' , 0)
--select CHARINDEX ( '_' ,'aa_bb_cc' , CHARINDEX ( '_' ,'aa_bb_cc' , 0)+1)
declare cursor_insert cursor for select d.name,a.name from syscolumns a, sysobjects d where a.id=d.id and d.xtype='U'
--and a.name=@旧列名 注意,注释了此段后全库执行,不注释则仅更新当前字段
--and d.name='sys' 注意,注释了此段后全库执行,不注释则仅更新当前表
declare @i varchar(500) ,@oldCol varchar(500)
open cursor_insert
fetch cursor_insert into @i ,@oldCol
while @@fetch_status=0
begin
declare @newCol varchar(500)
set @i=@i+'.'+@oldCol
set @newCol= UPPER(SUBSTRING(@oldCol,1,1))+SUBSTRING(@oldCol,2,( SELECT LEN(@oldCol)))
--print '首位'+ @newCol
set @newCol= SUBSTRING(@newCol,0,CHARINDEX ( '_' ,@newCol , 0))+UPPER(SUBSTRING(@newCol,CHARINDEX ( '_' ,@newCol , 0),2))+SUBSTRING(@newCol,CHARINDEX ( '_' ,@newCol , 0)+2,( SELECT LEN(@newCol)))
-- print '一杠'+ @newCol
set @newCol= SUBSTRING(@newCol,0,CHARINDEX ( '_' ,@newCol , CHARINDEX ( '_' ,@newCol , 0)+1))+UPPER(SUBSTRING(@newCol,CHARINDEX ( '_' ,@newCol , CHARINDEX ( '_' ,@newCol , 0)+1),2))+SUBSTRING(@newCol,CHARINDEX ( '_' ,@newCol , CHARINDEX ( '_' ,@newCol , 0)+1)+2,( SELECT LEN(@newCol)))
-- print '二杠'+ @newCol
set @newCol=replace(@newCol,'_','')
--print '替杠'+ @newCol
print @newCol
if(@newCol<>'SysName')--SysName
--消息 4185,级别 16,状态 1,过程 sp_rename,行 186 [批起始行 0]
--无法针对系统类型执行此操作。 执行替换这个字段时出错,不知何原因,请了解的朋友指教,所以我执行时排除了这个字段
begin
exec sp_rename @i,@newCol -- 执行替换
end
fetch cursor_insert into @i ,@oldCol
end
close cursor_insert
deallocate cursor_insert
替换前
替换后