比如有个数据库
表1(字段1,字段2,字段3...)
表2(字段1,字段2,字段3...)
表3(字段1,字段2,字段3...)
表4(字段1,字段2,字段3...)
...我要搜索所有表中的所有字段中的数据
如果出现1内容我就要替换为内容2
怎么写这个修改语句呢

解决方案 »

  1.   

    --try 測試前備份下
    DECLARE @fieldtype sysname
    SET @fieldtype='varchar'--替換处理
    DECLARE hCForEach CURSOR GLOBAL
    FOR
    SELECT N'update '+QUOTENAME(o.name)
        +N' set  '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''1内容'',''内容2'')'
    FROM sysobjects o,syscolumns c,systypes t
    WHERE o.id=c.id 
        AND OBJECTPROPERTY(o.id,N'IsUserTable')=1
        AND c.xusertype=t.xusertype
        AND t.name=@fieldtype
    EXEC sp_MSforeach_Worker @command1=N'?'
      

  2.   

    exec sp_msforeachtable N'  
    declare @tableName nvarchar(256), @sql nvarchar(4000),@value nvarchar(100)
    set @tableName=parsename(''?'',1) 
    set @sql=N''''
    set @value=N''内容1''select @sql=@sql+N'' update ''+@tableName+'' set ''+name+''=replace(''+name+'',N''''''+@value+'''''',''''内容2'''') where  charindex(N''''''+@value+'''''',''+name+'')>0''
    from syscolumns
    where id=object_id(@tableName)  and  type_name(xtype) in (''varchar'',''nvarchar'',''char'',''nchar'')--print @sql
    exec(@sql)
    '
      

  3.   


    exec sp_msforeachtable N' 
    declare @tableName nvarchar(256), @sql nvarchar(4000),@value nvarchar(100)
    set @tableName=parsename(''?'',1)
    set @sql=N''''
    set @value=N''内容1''select @sql=@sql+N'' update ''+@tableName+'' set ''+name+''=replace(''+name+'',N''''''+@value+'''''',N''''内容2'''') where  charindex(N''''''+@value+'''''',''+name+'')>0''
    from syscolumns
    where id=object_id(@tableName)  and  type_name(xtype) in (''varchar'',''nvarchar'',''char'',''nchar'')--print @sql
    exec(@sql)
    '