我想修改以下查询:
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)。由于这不是(当前)大型数据库,因此它可能是最简单的方法。
答案 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,您无法按字面意思执行此操作,但可以通过检查systable
和syscolumn
的联接中的列名称然后使用execute immediate