我们正在使用带有唯一标识符的 SQL Server 2012,我们注意到在执行选择时在末尾添加了额外的字符(所以不是 36 个字符),它仍然返回与 UUID 的匹配项。
例如:
select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8'
Run Code Online (Sandbox Code Playgroud)
返回带有 uuid 的行7DA26ECB-D599-4469-91D4-F9136EC0B4E8
。
但是如果你运行:
select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8EXTRACHARS'
Run Code Online (Sandbox Code Playgroud)
它还返回带有 uuid 的行7DA26ECB-D599-4469-91D4-F9136EC0B4E8
。
SQL Server 在进行选择时似乎忽略了 36 以外的所有字符。这是错误/功能还是可以配置的东西?
这不是一个大问题,因为我们在前端验证了长度,但对我来说这似乎不是正确的行为。
我有一个包含 700,000 行的表,其中包含一个字符串 id 字段,其值例如 rec-232276-dup-0 和 rec-354240-org。rec- 是常数,但 id 的其他部分可以改变。
我想拆分这个字符串,以便我只有整数部分和一个布尔值,具体取决于下一部分是否等于 dup 或 org(1 表示 dup,0 表示 org),我将其插入回表中。
我编写了以下循环来执行此操作,并且在功能上它运行良好,但是当我在完整的 700,000 行上运行它时,它需要非常长的时间(+12 小时和计数)。
我做错了什么导致它花费这么多时间?这是导致这种情况的字符串操作吗?我可以做些什么来改善这种情况?
谢谢你的帮助。
我的脚本如下:
select id
into #ControlTable
from [dbo].[original_test_dataset]
declare @TableID varchar(20)
while exists (select * from #ControlTable)
begin
select @TableID = (select top 1 id
from #ControlTable
order by id asc)
declare @duplicate bit
declare @id_only varchar(10)
--1. Find id only
-- Trim off rec-
set @id_only = REPLACE(@TableID,'rec-','')
-- Find position of first - and …
Run Code Online (Sandbox Code Playgroud)