我试图更改一个特定的值,它没有连接到它的列名或表。SQL替换数据库中的所有值,无论列和表
例如,它可以出现在:
column `name` in the table `users`
而且还表现在:
column `hi` in the table `jokes`
还有很多未知的地方。 如何在我的数据库中的所有sql数据上运行一个循环来更改它?
我使用phpMyAdmin
我试图更改一个特定的值,它没有连接到它的列名或表。SQL替换数据库中的所有值,无论列和表
例如,它可以出现在:
column `name` in the table `users`
而且还表现在:
column `hi` in the table `jokes`
还有很多未知的地方。 如何在我的数据库中的所有sql数据上运行一个循环来更改它?
我使用phpMyAdmin
至于你说的phpMyAdmin我想你正在使用MySQL。
请参见:
还有一个PHP脚本来做到这一点的:
对于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
运行它写这个剧本因为在大中型数据库上运行需要相当长的时间...
你在说几个表?您需要为每个表中的每个字段编写更新,或者编写编写代码*(动态SQL)*的代码来执行更新。你最终在同一个地方,都在所有表中的所有字段上运行更新,但动态SQL选项是*不重要。复制和粘贴可能会更好,可以编写一大堆查询,这些查询对不同的表执行几乎相同的操作。 – MatBailie
@Dems真的吗?想象一下,你需要创建一堆字符串。它将由静态字符串和来自数据库的数据组成。然后,您将使用这些字符串作为参数传递给其他人。你认为最好的解决方案是复制粘贴? –
*“我正在尝试更改与列名或表格无关的特定值。”* Oof。这里有一个问题,但它与句子的第二部分有关。 – Jason