使用SQL Server数据库表将URL中的%20字符串替换为下划线
我的SQl Server DB表中有一列的URL字符串中有%20。 我正在尝试用下划线“\u”替换%20。 每个URL在某一点上都是不同的。大约有1500条记录需要更新。我想使用此更新对所有记录进行批量更新 尽管查询成功,但数据库中没有任何更改。也许是因为Rollback语句 以下是我的SQL代码:使用SQL Server数据库表将URL中的%20字符串替换为下划线,sql,sql-server,replace,rollback,Sql,Sql Server,Replace,Rollback,我的SQl Server DB表中有一列的URL字符串中有%20。 我正在尝试用下划线“\u”替换%20。 每个URL在某一点上都是不同的。大约有1500条记录需要更新。我想使用此更新对所有记录进行批量更新 尽管查询成功,但数据库中没有任何更改。也许是因为Rollback语句 以下是我的SQL代码: Begin Try declare @newStringCount as int; declare @oldString as nvarchar(MAX); declar
Begin Try
declare @newStringCount as int;
declare @oldString as nvarchar(MAX);
declare @newString as nvarchar(MAX);
declare @stringToReplace as nvarchar(MAX);
set @stringToReplace = (SELECT resourceurl FROM [dbo].[ContentResourceBak2] where resourceurl like '%%20%');
Set @oldString = '%20';
Set @newString = '_';
Update [dbo].[ContentResourceBak2]
Set resourceurl = REPLACE(@stringToReplace, @oldString, @newString)
Commit
End Try
Begin Catch
set @newStringCount = (SELECT count (resourceurl) FROM [dbo].[ContentResourceBak2] where resourceurl like '%%20%');
if @newStringCount > 0
RollBack
END Catch
所有1500条记录仍然包含%20且没有下划线。
**更新:我用下划线替换%20的原因是URL映射到blob存储中每个单词之间都有uu的文件
set @stringToReplace = (SELECT resourceurl FROM [dbo].[ContentResourceBak2] where resourceurl like '%[%]20%');
但要注意这一点:
Update [dbo].[ContentResourceBak2]
Set resourceurl = REPLACE(@stringToReplace, @oldString, @newString)
UPDATE语句中没有WHERE条件。它将更改表中的每一行。如果您在生产环境中对此进行了测试,您可能只是破坏了您的数据。现在每个记录在
resourceurl
列中都具有相同的值,唯一的修复方法是从备份中恢复
你可能想要这个:
UPDATE[dbo].[ContentResourceBak2]
SET resourceurl = REPLACE(resourceurl, @oldString, @newString)
WHERE resourceurl like '%[%]20%';
最后,%20
是空格字符的代码。如果你想真实地对待你的数据,这里的空格可能更好。如果URL需要下划线,它将使用%5F
。坚持使用空格将意味着客户端代码可以再次对字符串进行URL编码并获得正确的结果。这让我想知道您是否最好保留原始数据,并根据需要让客户端代码URL解码%20
并不是您可以使用的唯一十六进制字符
但要注意这一点:
Update [dbo].[ContentResourceBak2]
Set resourceurl = REPLACE(@stringToReplace, @oldString, @newString)
UPDATE语句中没有WHERE条件。它将更改表中的每一行。如果您在生产环境中对此进行了测试,您可能只是破坏了您的数据。现在每个记录在
resourceurl
列中都具有相同的值,唯一的修复方法是从备份中恢复
你可能想要这个:
UPDATE[dbo].[ContentResourceBak2]
SET resourceurl = REPLACE(resourceurl, @oldString, @newString)
WHERE resourceurl like '%[%]20%';
最后,
%20
是空格字符的代码。如果你想真实地对待你的数据,这里的空格可能更好。如果URL需要下划线,它将使用%5F
。坚持使用空格将意味着客户端代码可以再次对字符串进行URL编码并获得正确的结果。这让我想知道您是否最好保留原始数据,并根据需要让客户端代码URL解码<代码>%20不是您最后可以使用的唯一十六进制字符。为什么用下划线而不是空格<代码>%20是空间的占位符。下划线应该是%5F
。可能他们改变了他们的URL在网站上的工作方式,现在他们需要更新数据库以匹配。为什么下划线而不是空格<代码>%20是空间的占位符。下划线应该是%5F
。可能他们改变了网站上URL的工作方式,现在他们需要更新数据库以匹配。最后,我怀疑是否有足够的理由进行替换。我有一个强烈的预感,OP可能正在尝试用URL解析器以外的其他东西来解析URL字符串,URL解析器在%20
上崩溃了。它将在下一个编码字符处再次崩溃。最后,我怀疑是否有充分的理由进行替换。我有一个强烈的预感,OP可能正在尝试用URL解析器以外的其他东西来解析URL字符串,URL解析器在%20
上崩溃了。它将在下一个编码字符处再次崩溃。