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

怎样修改数据库中调用的数据库名?
本帖最后由 zx75991 于 2012-12-17 17:29:12 编辑
新的数据库从原数据库备份恢复而来,但是存储过程中有很多是调用原数据库的,需要一一修改。
我可以用这样的语句获得所有需要修改的存储过程名。
select [name] from sysobjects where name 
like 'usp_Portal%' or name like 'usp_UM%'

在这些存储过程中,凡是调用UM库的,都需要把库名改成UM2.

有什么方法可以批量的修改替换。
比如原存储过程中查询语句中表名这样的 UM.UM.T_Tableame  
需要改成 UM2.UM.T_Tableame 
------解决方案--------------------
不可以批量修改,还是自己动手吧.
------解决方案--------------------
--2008
DECLARE 
        @proc_content VARCHAR(MAX) ,
        @old VARCHAR(20)= 'UM.',
        @new VARCHAR(20)='UM2.',

DECLARE c CURSOR FOR
SELECT [definition]
FROM sys.sql_modules m,sys.[objects] AS o
WHERE m.[object_id] =o.[object_id] AND o.[type]='P'
AND CHARINDEX(@old,m.[definition])>0

OPEN c
FETCH c INTO @proc_content
WHILE @@fetch_status = 0 
      BEGIN

            SET @proc_content=REPLACE(REPLACE(@proc_content , @old , @new),'CREATE PROC','ALTER PROC ')
            EXEC(@proc_content)
            FETCH c INTO @proc_content
      END
CLOSE c
DEALLOCATE c

------解决方案--------------------
引用:
--2008
SQL code?12345678910111213141516171819202122DECLARE         @proc_content VARCHAR(MAX) ,        @old VARCHAR(20)= 'UM.',        @new VARCHAR(20)='UM2.', DECLARE c CURSOR FORSELECT……
这个不得不顶爱锅