带有额外字符的向导问题



我有一个名为Student的表,包含列StudentId作为GUID,因此我使用Uniqueidentifier数据类型。

如果我想获得特定的记录,我通过下面的查询得到结果:

SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73'

返回预期的结果。但是,如果我错误地在最后也添加了任何额外的字符,它会返回相同的结果。就像下面的查询:

SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73xyz'

如果我在GUID的末尾传递额外的字符,为什么它不被认为是无效的GUID ?并返回相同的结果?

如文档所述:

下面的示例演示了当值太长而无法转换为的数据类型时如何截断数据。由于唯一标识符类型限制为36个字符,因此超过该长度的字符将被截断。

DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';
SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;

这是结果集。

String                                       TruncatedValue
-------------------------------------------- ------------------------------------
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong    0E984725-C51C-4BF4-9960-E1C80E27ABA0
(1 row(s) affected)

GUID是16字节,所以从给定的919C3BF9-B081-458C-897D-C0B3FF56AF73

91是第一个字节
9C是第二个字节
3B是第3个字节
F9是第4字节
. .
. .
. .
. .
56是第14字节
AF是第15个字节
73是第16字节

919C3BF9-B081-458C-897D-C0B3FF56AF73xyzxyz之前完成解析。

所以字符在第16个字节之后输入,将不被考虑。

但是如果你在前面添加了任何额外的字符,它将不认为是有效的GUID

此外,当您使用GUID查询时,请使用{}之间的代码。

SELECT * FROM Student 
WHERE StudentId = '{919C3BF9-B081-458C-897D-C0B3FF56AF73}'

相关内容

  • 没有找到相关文章

最新更新