簡體   English   中英

如何在Guid / UNIQUEIDENTIFIER(SQL Server)中解釋#

[英]How is a # intepreted in a Guid/UNIQUEIDENTIFIER (SQL Server)

這是一種我只是錯誤地了解的行為。 SQL Server中的表有一個UNIQUEIDENTIFIER列,我運行了一個查詢:

SELECT * FROM Tbl WHERE GuidColumn = N'2B375CD8-D210-463F-A2FD-EAFB0D643664#1'

Guid末尾的#1錯誤地到達了那里,因為我從附加#1,#2,#3等的URL復制粘貼它,表示分頁。

讓我感到驚訝的是,查詢運行得很好,我得到了與運行時相同的結果:

SELECT * FROM Tbl WHERE GuidColumn = N'2B375CD8-D210-463F-A2FD-EAFB0D643664'

有誰知道在這種情況下如何解釋#和之后的任何內容?

這在MSDN上明確處理: http//msdn.microsoft.com/en-us/library/ms187942.aspx

這並不意味着任何東西-轉換成的Guid當SQL Server只讀取該字符串的第36個字符。

澄清

在John Gathogo關於'{GUID}[gibberish]'案例(以及接受后)的評論之后,我想我可以稍微擴展規則。

1)如果該字符串以'{'開頭,那么第38個 必須'}' (嘗試在其中的前導和尾隨空格 - 它將不起作用),否則轉換失敗。 然后轉換36個字符。

2)否則,使用前36個字符。

所以你可以添加:)<<antidisestablishmentarianism - 在1)中的第38個字符或2中的第36個字符后,它沒有任何區別。

GUID是固定寬度,因此在類型轉換期間會刪除額外字符;

declare @g uniqueidentifier = '2B375CD8-D210-463F-A2FD-EAFB0D643664#1'
select @g
>> 2B375CD8-D210-463F-A2FD-EAFB0D643664

我懷疑查詢引擎看到它是一個uniqueidentifier,內部只是截斷36個字符 - 所以之后的任何事情都會被忽略。 這也很好,所以它與#符號完全無關:

SELECT CONVERT(UNIQUEIDENTIFIER, 'F9B8E808-E589-499B-8E57-22B7CBB2D63E ...
       and here is some extra garbage for fun');

結果:

------------------------------------
F9B8E808-E589-499B-8E57-22B7CBB2D63E

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM