2

列名またはテーブルとは関係のない特定の値を変更しようとしています。

たとえば、次の場所に表示されます。

column `name` in the table `users`

また、次の場合もあります。

column `hi` in the table `jokes`

まだまだ知らない場所がたくさんあります。データベース内のすべての SQL データに対してループを実行して変更するにはどうすればよいですか?

私はPHPMyAdminを使用しています

4

2 に答える 2

1

PHPMyAdmin とおっしゃっているように、MySQL を使用していると思います。

見る:

これを行うための PHP スクリプトも次の場所にあります。

于 2012-06-22T13:23:42.447 に答える
0

SQL Server 2000 の場合: このスクリプトを書きました

-- full search and replace version sql server 2000
SET NOCOUNT ON

DECLARE @columnname varchar(255), @tablename varchar(255), @sql varchar(8000), @oldvalue varchar(1000), @newvalue varchar(1000)

SET @oldvalue = 'OldText' -- text to replace
SET @newvalue = 'NewText'  -- text to replace by

DECLARE table_cursor CURSOR FOR
select name from sysobjects where xtype='U' AND [name] LIKE 'MyTablePrefix_%' -- your table prefix
OPEN table_cursor

FETCH NEXT FROM table_cursor
INTO @tablename

WHILE @@FETCH_STATUS = 0
BEGIN

PRINT 'Updating Table: ' + @tablename + '...'

DECLARE column_cursor CURSOR FOR
SELECT     syscolumns.name AS column_name
FROM         sysobjects INNER JOIN
                      syscolumns ON sysobjects.id = syscolumns.id INNER JOIN
                      systypes ON syscolumns.xtype = systypes.xtype
WHERE     (sysobjects.xtype = 'U')
AND       systypes.[name] IN ('varchar','nvarchar','text','ntext')
AND       sysobjects.name =  @tablename
ORDER BY sysobjects.name, syscolumns.colid

OPEN column_cursor
FETCH NEXT FROM column_cursor INTO @columnname

WHILE @@FETCH_STATUS = 0
BEGIN

PRINT 'Updating Column: ' + @columnname + '...'

SET @SQL = 'UPDATE ' + @tablename
SET @SQL = @SQL + ' SET ' + @columnname + ' = Replace(CAST(' + @columnname + ' AS nvarchar(4000)),'''+ @oldvalue + ''',''' + @newvalue + ''')'
--PRINT @sql
EXECUTE(@SQL)

FETCH NEXT FROM column_cursor INTO @columnname
END

CLOSE column_cursor
DEALLOCATE column_cursor

FETCH NEXT FROM table_cursor
INTO @tablename

END
CLOSE table_cursor
DEALLOCATE table_cursor

中規模から大規模のデータベースで実行するにはかなりの時間がかかるため、夜間に実行してください...

于 2013-08-07T10:01:00.610 に答える