项目上遇到需要重命名1个库的部分表名和过程名,手动改肯定不现实的,考虑到sqlserver自带有命令,但是需要批量输出,
实现方式:
第一步:做一个excel把新旧表名和存储过程名都整理好
第二步:使用SqlServer自带的导入功能把excel导入
第三步:使用SqlServer的rename命令
首先想到了用 select 语句,如下
SELECT 'sp_rename '''+原表名+''','''+新表名+''''FROM dbo.表名对照
SELECT 'sp_rename '''+原存储过程名+''','''+新存储过程名+'''' FROM dbo.存储过程名对照
但是发现,输出的没有 go 关键字,会报错,
遂改成
SELECT 'sp_rename '''+原表名+''','''+新表名+'''go 'FROM dbo.表名对照
SELECT 'sp_rename '''+原存储过程名+''','''+新存储过程名+'''go ' FROM dbo.存储过程名对照
还是报错, 因为必须不在同一行
如果再使用循环或游标循环生成好麻烦,后来想到print,但是需要转行,查阅网上资料找到如下方式:
然后语句如下:
SELECT 'sp_rename '''+原表名+''','''+新表名+''''+ CHAR(10)+'go' FROM dbo.表名对照
SELECT 'sp_rename '''+原存储过程名+''','''+新存储过程名+''''+ CHAR(10)+'go' FROM dbo.存储过程名对照
结果如下:
搞定,正常执行成功,原来是
/* SQL的换行
制表符 CHAR(9)
换行符 CHAR(10)
回车 CHAR(13)
*/