使用SQL Server数据库表将URL中的%20字符串替换为下划线

使用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

我的SQl Server DB表中有一列的URL字符串中有%20。 我正在尝试用下划线“\u”替换%20。 每个URL在某一点上都是不同的。大约有1500条记录需要更新。我想使用此更新对所有记录进行批量更新

尽管查询成功,但数据库中没有任何更改。也许是因为Rollback语句

以下是我的SQL代码:

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
上崩溃了。它将在下一个编码字符处再次崩溃。