SQL查询全部替换

时间:2011-09-13 12:41:36

标签: sql database

我想修改以下查询:

UPDATE wp_posts
SET post_content =
      REPLACE(post_content, 'http://oldlink.com', 'http://newlink.com');

成为遍历所有表,列和值的东西。类似于此的东西(但这不起作用):

UPDATE * SET *= REPLACE(*, 'http://oldlink.com', 'http://newlink.com'); 

我想将旧链接的每个实例替换为我数据库中的新链接。有没有办法做到这一点?

更新

对不起,我忘了提,这是MySQL。我现在正在仔细阅读所有答案,我会回来让你知道什么是有效的。谢谢大家!

更新2

嗨伙计们(和女孩们),我决定只是转储数据库并进行手动搜索和替换(使用TextWrangler)。由于这不是(当前)大型数据库,因此它可能是最简单的方法。

3 个答案:

答案 0 :(得分:3)

这是一个适用于SQL Server的程序 - 做这样的事情对你有用吗?

Search and Replace SQL Server data in all columns, of all tables

  

这是一个名为SearchAndReplace的存储过程,用于搜索   通过当前所有表的所有字符列   数据库,并用提供的另一个用户替换给定的字符串   字符串。

答案 1 :(得分:1)

如果表中有计算列,这个mssql脚本会发出一些声音,但它仍会执行:

DECLARE @searchvalue varchar(100)
DECLARE @newvalue varchar(100)
SET nocount off

SET @searchvalue = 'http://oldlink.com'
SET @newvalue = 'http://newlink.com'

SELECT * into #t FROM 
(
SELECT 'update [' + a.TABLE_name + '] SET ['+ column_name+ ']=''' + @newvalue + '''
where [' +a.column_name+
']='''+@searchvalue +'''' sqlstring
FROM INFORMATION_SCHEMA.COLUMNS a
join 
INFORMATION_SCHEMA.TABLES b
ON a.TABLE_name = b.TABLE_name
and b.TABLE_type = 'base table'
WHERE data_type in ('varchar', 'char', 'nvarchar')
and character_maximum_length >= len(@newvalue)
) a

DECLARE @sqlstring as nvarchar(500)
DECLARE SqlCursor CURSOR FAST_FORWARD FOR
SELECT sqlstring FROM #t
OPEN SqlCursor
FETCH NEXT FROM SqlCursor
INTO @sqlstring
WHILE @@FETCH_STATUS = 0
BEGIN

     EXEC(@sqlstring)
     FETCH NEXT FROM SqlCursor
     INTO @sqlstring
END
CLOSE SqlCursor
DEALLOCATE SqlCursor
DROP TABLE #t

答案 2 :(得分:0)

你没有提到数据库。我目前使用的是Sybase ASA,您无法按字面意思执行此操作,但可以通过检查systablesyscolumn的联接中的列名称然后使用execute immediate

来完成此操作