在 Where 子句中使用 GUID

W.H*_*W.H 6 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'
Run Code Online (Sandbox Code Playgroud)

使用 LIKE 也不起作用。

在此处输入图片说明

在此处输入图片说明

Rah*_*hul 11

尝试这个

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


Sat*_*rny 2

由于您提到该列存储为NVARCHAR,因此该字符串可能具有前导或尾随空格,这就是为什么它可能不会在带有该子句的查询中弹出WHERE

你可以试试这个:

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

这应该显示结果,因为WHERE子句中的前导空格和尾随空格被消除。

另外,如果您想使用运算LIKE符,您可以将查询编写为:

SELECT      [fileID],
            [fileCOde],
            [filePassword],
            [fileDescription],
            [rowguid],
            [secguid]
FROM        [dbo].[dbMobileFile]
WHERE       secguid LIKE '%3137459D-EFDE-449E-94A3-89345A8580FA%'
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!!!