在SQL中检查空GUID

Wil*_*son 47 t-sql sql-server

如何检查存储过程中的参数是否为空GUID?

Mei*_*ude 99

SELECT CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER)
Run Code Online (Sandbox Code Playgroud)

这应该返回你的空guid.

...甚至更短,节省一个演员:

SELECT CAST(0x0 AS UNIQUEIDENTIFIER)
Run Code Online (Sandbox Code Playgroud)

所以要检查一下,你会这样做

IF @GuidParam = CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER)
BEGIN
   --Guid is empty
END
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用此替代语法来获取空guid CAST(0x0 AS UNIQUEIDENTIFIER) (37认同)
  • @JoãoAntunes - 与大多数事情一样,即使存在一些速度差异,通常更重要的是更具可读性且更不容易出错.就个人而言,我喜欢"0x0"方法,因为你不会想知道是否有正确数量的`0`s和`-`s.性能方面很难衡量,因为它们都是如此之快,但在我天真的测量中,它们是难以区分的,每个大约需要1微秒,即你每秒可以进行大约1,000,000次演员. (2认同)

Tho*_*mas 12

由于空guid永远不会改变,另一个显而易见的方法是简单地使用00000000-0000-0000-0000-000000000000而不是计算它.

If @Param = '00000000-0000-0000-0000-000000000000'
...
Run Code Online (Sandbox Code Playgroud)

或者,如果在过程中,您可以设置一个参数作为常量:

Declare @EmptyGuid uniqueidentifier
Set @EmptyGuid = '00000000-0000-0000-0000-000000000000'
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个标量用户定义函数,它只返回上面的常量值(或者像在Meiscooldude解决方案中那样重新计算).


Mih*_*kov 5

DECLARE @EmptyGuid UNIQUEIDENTIFIER = 0x0
DECLARE @NonEmpty UNIQUEIDENTIFIER = NEWID()
IF @EmptyGuid = 0x0 PRINT 'Empty'
IF @NonEmpty = 0x0 PRINT 'Empty' ELSE PRINT 'NonEmpty'
Run Code Online (Sandbox Code Playgroud)

会打印

空的

非空