背景:
在一个数据表中,数据表的表名命名如下:AA_UserDefineArticleDTO_XXXX_Ext,数据表有很多字段命名为:UserDefineArticleDTO_YYYYY,如下图所示。
先需要对表的字段进行重命名,批量修改列名称。
编写下述sql procedure:
Drop procedure SetDtoExt go Create procedure SetDtoExt @dtoOldName varchar(50), @dtoNewName varchar(50), @dbName varchar(50) AS Declare @columnName varchar(128) Declare @newColumnName varchar(128) Declare @sql varchar(256) declare columnName_cursor cursor for select syscolumns.name,replace(syscolumns.name,@dtoOldName,@dtoNewName) FROM syscolumns WHERE syscolumns.id = object_id(@dbName+'.dbo.AA_'+@dtoOldName+'_Ext') and syscolumns.name like '%'+@dtoOldName+'%' BEGIN open columnName_cursor fetch next from columnName_cursor into @columnName,@newColumnName while @@fetch_status=0 begin --exec sp_rename 'AA_'+@dtoOldName+'_Ext.'+@columnName,@newColumnName,'COLUMN' --SET @sql='sp_rename'+' ''[AA_'+@dtoOldName+'_Ext].['+@columnName+']'','''+@newColumnName+''',''COLUMN'''; --EXEC(@sql) SET @sql='sp_rename'+' ''AA_'+@dtoOldName+'_Ext.'+@columnName+''','''+@newColumnName+''',''COLUMN'''; EXEC(@sql) fetch next from columnName_cursor into @columnName,@newColumnName end close columnName_cursor deallocate columnName_cursor END go exec SetDtoExt 'UserDefineArticleDTO_0001','UseStatusDTO','UFTData90901_001';
- 在执行重命名操作时,注意需要添加引号,不过不添加引号就会报错!
- 表可以用方括号括起来,也可以不括起来。
- 在打开游标后需要添加fetch next from columnName_cursor into @columnName,@newColumnName,否者会陷入死循环!
欢迎大家交流!