2017-02-17 41 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)