小编Chr*_*ium的帖子

选择中仍然匹配额外字符的唯一标识符

我们正在使用带有唯一标识符的 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 以外的所有字符。这是错误/功能还是可以配置的东西?

这不是一个大问题,因为我们在前端验证了长度,但对我来说这似乎不是正确的行为。

sql-server t-sql sql-server-2012

18
推荐指数
3
解决办法
9743
查看次数

数据库 SQL 脚本非常非常慢(超过 70 万行的字符串操作)

我有一个包含 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)

performance sql-server query-performance

0
推荐指数
1
解决办法
1343
查看次数