日期:2014-05-17  浏览次数:20344 次

修改表名后, 如何方便快捷地更新所有的视图,存储过程以及自定义方法。
数据库比较大,根据客户需求把里面的表都按照新的命名规则重命名了,但数据库里面的视图,存储过程以及自定义方法都比较多,而且互相引用嵌套,关系十分复杂,如果一个一个地去修改代码的话,工作量十分庞大,请教各位大神有没有简单可行的解决方案。
------最佳解决方案--------------------
引用:
数据库比较大,根据客户需求把里面的表都按照新的命名规则重命名了,但数据库里面的视图,存储过程以及自定义方法都比较多,而且互相引用嵌套,关系十分复杂,如果一个一个地去修改代码的话,工作量十分庞大,请教各位大神有没有简单可行的解决方案。
vs2010有管控数据库的功能,把整个数据库加载到vs中。然后只需要改动一个地方,然后其他引用的地方连带全部更改。不过如果你从来没用过,那要学。要点时间。比较快捷的方法就是把整个库的所有脚本导出来然后替换
------其他解决方案--------------------
create view 修改前表名
as
 select * from 修改后表名
------其他解决方案--------------------
改表a名为a_t
建个名为a的视图:select * from a_t
------其他解决方案--------------------
补充一下问题:所有对数据库的操作都要求用脚本,然后提供脚本给客户去它的服务器上运行脚本,修改数据库。
------其他解决方案--------------------
引用:
引用:数据库比较大,根据客户需求把里面的表都按照新的命名规则重命名了,但数据库里面的视图,存储过程以及自定义方法都比较多,而且互相引用嵌套,关系十分复杂,如果一个一个地去修改代码的话,工作量十分庞大,请教各位大神有没有简单可行的解决方案。vs2010有管控数据库的功能,把整个数据库加载到vs中。然后只需要改动一个地方,然后其他……


表示没懂啊,可有详细说明?
------其他解决方案--------------------
引用:
引用:
引用:数据库比较大,根据客户需求把里面的表都按照新的命名规则重命名了,但数据库里面的视图,存储过程以及自定义方法都比较多,而且互相引用嵌套,关系十分复杂,如果一个一个地去修改代码的话,工作量十分庞大,请教各位大神有没有简单可行的解决方案。vs2010有管控数据库的功能,把整个数据库加载到vs中。然后只需……
看看有没有第三方工具协助吧。那个vs的你没用过的话一时半刻说不清楚。red gate看看有没有破解的。
------其他解决方案--------------------
因为对数据库的所有修改都要提供SQL脚本,所以根据同事的建议,先重命名所有的Table,把重命名前后的Table Name 存放在内存中,通过这些新老Table Name去替换掉视图中所有的Table Name。这个思路是不是看上去很可行啊,于是我花了大半天的时间研究出了以下这段SQL脚本。
想法很好很天真,可到头来替换的时候问题多多,白做了,不得不一个一个地去修改。
各位大神帮我鉴定一下这样的解决方案能行不?

declare @new_table_name varchar(50);
declare @table_name varchar(50);
declare @pre_name varchar(50);
declare @name_record Table(
OldTableName VARCHAR(100),
NewTableName VARCHAR(100)
);

declare table_cursor cursor for
select name from sys.objects where type = 'U' and name like 'AT_%'

open table_cursor
fetch next from table_cursor into @table_name

while @@fetch_status = 0
begin
-- replace table name, eg: 'AT_CRM_Client' -> 'CRM.Client'
set @new_table_name = Replace(Replace(@table_name, 'AT_', ''), '_', '.');

-- eg:CRM -> Crm
set @pre_name = LOWER(Substring(@new_table_name,0,Charindex('.',@new_table_name)));
set @pre_name = STUFF(@pre_name,1,1,UPPER(SUBSTRING(@pre_name,1,1)));

--reorganize table name ge:CRM.Client -> Crm.Client
set @new_table_name = STUFF(@new_table_name,1,Charindex('.',@new_table_name)-1,@pre_name);

--rename all the tables
    exec sp_rename @table_name,@new_table_name;
    
    --Save the old table and new table name
    Insert @name_record values(@table_name,@new_table_name);
    
    fetch next from table_cursor into @table_name
end

close table_cursor
deallocate table_cursor