[英]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.