gpt4 book ai didi

sql - 在整个数据库中进行字符串替换的最用户友好的方法?

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:18 26 4
gpt4 key购买 nike

编辑:使用的技术是 CMS 的 asp.net 和数据库的 MSSQL。

我想将项目从开发服务器移动到实时服务器。我使用的 CMS 将一些 URL 保存为绝对路径而不是相对路径,这会破坏很多图像。

即将损坏的 URL 分散在数据库中的多个表中。有些位于特定字段中(如“来源”或“url”),但大多数只是较大文本字段的一部分(cms 的 html 内容)。

我现在正在寻找一种简单快捷的方法来在移动网站之前/移动网站时“修复”URL。

所有 URL 都具有相同的结构,因此它基本上归结为搜索替换,但是当我试图为 SQL 中的部分字符串找到一个简单的搜索替换时,我被包含多个循环等的代码墙淹没了。

所以我目前的计划是导出整个数据库(如 mysqldump),将其加载到文本编辑器中,进行搜索替换、保存、导入。

对于我来说,这似乎是针对该特定问题的最用户友好/最简单的解决方案 - 但是我很少直接处理 SQL,所以也许我忽略了什么?如果有更好和/或更优雅的方式,请赐教。

最佳答案

希望对你有帮助

这里的想法是循环遍历所有表中的所有列(仅字符列)并使用包含 REPLACE 语句的 UPDATE 语句更新列。

SQL:

Declare @sysTab table (id int identity(1,1),[object_id] int)
Insert into @sysTab
Select object_id from sys.tables Where type = 'U'

Declare @ts int = 1, @te int = (Select Count(*) From sys.tables)
Declare @cs int ,@ce int,@object_id int, @sql varchar(max)

While @ts <= @te
Begin
Set @cs = 1
Set @object_id = (Select [object_id] From @sysTab Where id = @ts)
Set @ce = ( Select Count(*)
from sys.columns C
join sys.types ty On C.system_type_id = ty.system_type_id
where ty.name in ('char','nchar','ntext','nvarchar','text','varchar','nchar')
And object_id = @object_id)
While @cs <= @ce
Begin
Set @sql = 'Update A Set A.' + (Select name from sys.columns c where c.object_id = @object_id) +' = replace(A.'+ (Select name from sys.columns c where c.object_id = @object_id) + ',''URL'',''newURL'') From' + (Select name from sys.tables t where t.object_id = @object_id) + 'A'
Exec(@sql)
Set @cs = @cs + 1
End
Set @ts = @ts + 1
End

关于sql - 在整个数据库中进行字符串替换的最用户友好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25261202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com