使用 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
不是您最终可能得到的唯一十六进制字符。
我的 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
不是您最终可能得到的唯一十六进制字符。