使用 SQL 服务器数据库 Table 将 URL 中的 %20 字符串替换为下划线

Replace %20 string in URL with Underscore using SQL Server Database Table

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

但是查询成功,数据库中没有任何变化。可能是因为回滚语句?

这是我的 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 和 NO 下划线。 **更新:我用下划线替换 %20 的原因是因为 URL 映射到 blob 存储中每个单词之间有 _ 的文件。

set @stringToReplace = (SELECT resourceurl FROM [dbo].[ContentResourceBak2] where resourceurl like '%[%]20%');

但要注意这一点:

Update [dbo].[ContentResourceBak2] 
Set resourceurl = REPLACE(@stringToReplace, @oldString, @newString)  

UPDATE 语句没有 WHERE 条件。它将更改 table 中的每一行。
如果您在生产环境中对此进行了测试,您可能刚刚毁掉了您的数据。现在每条记录在 resourceurl 列中将具有 相同 值,修复它的唯一方法是从备份中恢复。

你可能想要这个:

UPDATE[dbo].[ContentResourceBak2] 
SET resourceurl = REPLACE(resourceurl, @oldString, @newString)  
WHERE resourceurl like '%[%]20%';

最后,%20 是 space 字符的代码。如果您想忠实于您的数据,space 可能在这里更好。如果 URL 想要一个下划线,它会使用 %5F。坚持使用 space 意味着客户端代码可以再次对字符串进行 URL 编码并获得正确的结果。这让我想知道您是否可以更好地保留原始数据,并让客户端代码 URL 根据需要进行解码。 %20 不是您最终可能得到的唯一十六进制字符。