2017-02-17 43 views
0

由於某些原因,我無法在GUID列上使用比較,它不會返回任何結果。在哪裏使用GUID

請參閱下面的WHERE子句設置爲'secguid'列的確切值,它不會返回任何結果。這是怎麼回事?

SELECT * FROM dbMobileFile 

SELECT * FROM dbMobileFile WHERE secguid = '3137459D-EFDE-449E-94A3-89345A8580FA' 

SELECT * FROM dbMobileFile WHERE secguid LIKE '3137459D-EFDE-449E-94A3-89345A8580FA' 

使用LIKE也不起作用。

enter image description here

enter image description here

+0

嘗試TRIM在Where子句 –

+0

請出示你的'LIKE'查詢secguid。並嘗試使用有問題的文本(除圖像以外) – Sangharsh

+2

您能否確認表格定義?尤其是'secguid'被定義爲'uniqueidentifier'嗎? –

回答

1

既然你提到的是,列存儲爲NVARCHAR,其可能的字符串已經開頭或結尾的空格,這就是爲什麼它可能無法與查詢中彈出WHERE條款。

你可以試試這個:

SELECT  [fileID], 
      [fileCOde], 
      [filePassword], 
      [fileDescription], 
      [rowguid], 
      [secguid] 
FROM  [dbo].[dbMobileFile] 
WHERE  LTRIM(RTRIM(secguid)) = '3137459D-EFDE-449E-94A3-89345A8580FA' 

應該告訴你結果作爲開頭和結尾的空格都在WHERE子句中消除。

此外,如果你想使用LIKE運營商,你可以寫你的查詢爲:

SELECT  [fileID], 
      [fileCOde], 
      [filePassword], 
      [fileDescription], 
      [rowguid], 
      [secguid] 
FROM  [dbo].[dbMobileFile] 
WHERE  secguid = '%3137459D-EFDE-449E-94A3-89345A8580FA%' 

希望這有助於!

+0

這兩個解決方案都會有糟糕的性能。正確的解決辦法當然是改變'secguid'列實際上是一個guid。 – Magnus

+0

@Magnus同意。這是最好的解決方案。然而,我不知道(在回答的時候)OP是否有自由用於表格修改(例如,如果它是一個帶有由其他人維護的edmx連接的實時應用程序)。就問題而言,如何使用'WHERE'子句得到結果,這會做(儘管不是最好的解決方案我完全同意)。 –

0

試試這個

SELECT  [fileID], 
      [fileCOde], 
      [filePassword], 
      [fileDescription], 
      [rowguid], 
      [secguid] 
FROM  [dbo].[dbMobileFile] 
WHERE  CAST(secguid as uniqueidentifier) = CAST('3137459D-EFDE-449E-94A3-89345A8580FA' as uniqueidentifier)