在Where子句中使用GUID

时间:2017-02-17 08:47:27

标签: sql sql-server

由于某种原因,我无法在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

4 个答案:

答案 0 :(得分: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%'

希望这有帮助!!!

答案 1 :(得分:1)

试试这个

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

答案 2 :(得分:0)

尝试一下:

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

使用括号括住GUID字符串,例如('GUID')

答案 3 :(得分:0)

我遇到了数据库损坏的问题。一些GUID包含在WHERE子句中,而其他GUIDS位于同一表上则不会返回结果。

证明该数据库存在索引问题。运行DBCC以确保您的数据库没有损坏。