我现在有50多个存储过程都含有“WY_tempdb”内容,如何“WY_tempdb”批量替换为“WY_BACKUP_DB”,请高手指教,非常感谢!

解决方案 »

  1.   


    declare @old varchar(100),@new varchar(100),@s varchar(8000)
    set @old='WY_tempdb'
    set @new='WY_BACKUP_DB'
    declare c cursor for
    select 'alter '+replace(stuff(a.[text],1,6,''),@old,@new) 
    from syscomments a 
    join sysobjects b 
    on a.id=b.id and b.type='p' 
    open c
    fetch c into @s
    while @@fetch_status=0
    begin
    exec(@s)
    fetch c into @s
    end
    close c
    deallocate c
      

  2.   


    declare @old varchar(100),@new varchar(100),@s varchar(8000)
    set @old='WY_tempdb'
    set @new='WY_BACKUP_DB'
    declare c cursor for
    select 'alter '+replace(stuff(a.[text],1,6,''),@old,@new) 
    from syscomments a 
    join sysobjects b 
    on a.id=b.id and b.type='p' and charindex(@old,a.[text])>0
    open c
    fetch c into @s
    while @@fetch_status=0
    begin
    exec(@s)
    fetch c into @s
    end
    close c
    deallocate c这个会快点
      

  3.   

    如果存储过程名称中含有WY_tempdb呢?
      

  4.   

    3楼运行出错消息 156,级别 15,状态 1,第 9 行
    关键字 'CREATE' 附近有语法错误。
    消息 111,级别 15,状态 1,第 14 行
    'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。
    消息 102,级别 15,状态 1,第 105 行
    'Sm' 附近有语法错误。
      

  5.   

    declare @old varchar(100),@new varchar(100),@s varchar(8000)
    set @old='from'
    set @new='FROM'
    declare c cursor for
        select replace(stuff(a.[text],charindex('CREATE',a.[text]),6,'ALTER'),@old,@new) + char(13)+'GO'
        from syscomments a 
            join sysobjects b 
                on a.id=b.id and b.type='p' and charindex(@old,a.[text])>0
    open c
    fetch c into @s
    while @@fetch_status=0
    begin
        print(@s)
        fetch c into @s
    end
    close c
    deallocate c
      

  6.   


      print(@s)
      EXEC(@S)--加这句会出错
        fetch c into @s消息 102,级别 15,状态 1,过程 ExpansionTrackingBtsE1SP,第 59 行
    'GO' 附近有语法错误。
      

  7.   

    如果是2005的,试试:declare @oldstr varchar(500),@newstr varchar(500),@proc_name varchar(500),@s varchar(max)
    set @old='WY_tempdb'
    set @new='WY_BACKUP_DB'
    declare c cursor for
        select distinct b.name 
        from syscomments a 
            join sysobjects b 
                on a.id=b.id and b.type='p' and charindex(@oldstr,a.[text])>0
    open c
    fetch c into @proc_name
    while @@fetch_status=0
    begin
    set @s=null
    select @s=isnull(@s,'')+text from syscomments where object_name(id)=@proc_name
    set @s=replace(@s,@oldstr,@newstr)
    set @s=stuff(@s,charindex('CREATE',@s),6,'ALTER')
    exec(@s)
        fetch c into @proc_name
    end
    close c
    deallocate c
      

  8.   

    存储过程语法是放在syscomments中的。 
    替换一下就行了。 htl写得很好了。