C# 如何在Guid/UNIQUEIDENTIFIER(SQL Server)中进行intepreted
这是一个我只是无意中了解到的行为。SQL Server中的表有一个UNIQUEIDENTIFIER列,我运行了如下查询:C# 如何在Guid/UNIQUEIDENTIFIER(SQL Server)中进行intepreted,c#,sql,sql-server,tsql,C#,Sql,Sql Server,Tsql,这是一个我只是无意中了解到的行为。SQL Server中的表有一个UNIQUEIDENTIFIER列,我运行了如下查询: SELECT * FROM Tbl WHERE GuidColumn = N'2B375CD8-D210-463F-A2FD-EAFB0D643664#1' Guid末尾的1错误地到达了那里,因为我从一个url复制粘贴了它,该url追加了表示分页的1、2、3等等 令我惊讶的是,查询运行得很好,我得到了与运行时相同的结果: SELECT * FROM Tbl WHERE Gu
SELECT * FROM Tbl WHERE GuidColumn = N'2B375CD8-D210-463F-A2FD-EAFB0D643664#1'
Guid末尾的1错误地到达了那里,因为我从一个url复制粘贴了它,该url追加了表示分页的1、2、3等等
令我惊讶的是,查询运行得很好,我得到了与运行时相同的结果:
SELECT * FROM Tbl WHERE GuidColumn = N'2B375CD8-D210-463F-A2FD-EAFB0D643664'
有人知道在这种情况下是如何输入的吗?GUID是固定宽度的,因此在类型转换过程中会去掉多余的字符
declare @g uniqueidentifier = '2B375CD8-D210-463F-A2FD-EAFB0D643664#1'
select @g
>> 2B375CD8-D210-463F-A2FD-EAFB0D643664
我怀疑查询引擎看到它是一个唯一标识符,并且在内部只截断了36个字符——因此后面的任何内容都将被忽略。这也很好,所以它与标志完全无关: 结果:
------------------------------------
F9B8E808-E589-499B-8E57-22B7CBB2D63E
MSDN中明确说明了这一点: 这并不意味着什么-SQL server在转换为Guid时只读取字符串的前36个字符 澄清 继John Gathogo对“{GUID}[gibberish]”案例的评论之后,在接受之后,我想我可以稍微扩展一下规则 1如果该字符串以“{”开头,则第38位必须是“}”,请尝试使用其中的前导空格和尾随空格,否则转换将失败。然后转换其中的36个字符 2否则,将使用前36个字符
所以你可以加上:,不是我对你的解释有异议,而是这个SELECT*FROM-Tbl,其中GuidColumn=N'{2B375CD8-D210-463F-A2FD-EAFB0D643664}'也有效。所以当你添加{}时,它会比你的前36个字符的解释更严格,因为你不能在{}中输入其他乱七八糟的内容。但是,您可以在结束后添加胡言乱语}@JohnGathogo,这是一个公平点,它将编辑为更合适的内容
------------------------------------
F9B8E808-E589-499B-8E57-22B7CBB2D63E