SQL-запрос Заменить все - PullRequest
       2

SQL-запрос Заменить все

1 голос
/ 13 сентября 2011

Я хочу изменить следующий запрос:

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 ]

3 голосов
/ 13 сентября 2011

Вот тот, который работает на SQL Server - что-то подобное работает для вас?

Поиск и замена данных SQL Server во всех столбцах всех таблиц

Вот хранимая процедура с именем SearchAndReplace, которая ищет через все символьные столбцы всех таблиц в текущем базы данных, и заменяет данную строку другим предоставленным пользователем строка.

1 голос
/ 13 сентября 2011

Этот скрипт 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
0 голосов
/ 13 сентября 2011

Вы не упомянули базу данных.В настоящее время я использую Sybase ASA, где вы не можете сделать это буквально, но это можно сделать, проверив имена столбцов из объединения systable и syscolumn, а затем используя execute immediate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...