Sql server 检查SQL中是否存在空GUID

Sql server 检查SQL中是否存在空GUID,sql-server,tsql,Sql Server,Tsql,如何检查存储过程中的参数是否为空GUID SELECT CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER) 应该返回空的guid 。。。甚至更短,节省一次演员阵容: SELECT CAST(0x0 AS UNIQUEIDENTIFIER) 所以要检查这一点,你可以这样做 IF @GuidParam = CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER) BEGIN --Guid is empty END 由于空g

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

SELECT CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER)
应该返回空的guid

。。。甚至更短,节省一次演员阵容:

SELECT CAST(0x0 AS UNIQUEIDENTIFIER)
所以要检查这一点,你可以这样做

IF @GuidParam = CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER)
BEGIN
   --Guid is empty
END

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

If @Param = '00000000-0000-0000-0000-000000000000'
...
或者,如果在过程中,可以将参数设置为常量:

Declare @EmptyGuid uniqueidentifier
Set @EmptyGuid = '00000000-0000-0000-0000-000000000000'
或者,您可以创建一个标量用户定义函数,该函数只返回上述常量值(或者像在Meiscooldude解决方案中那样重新计算它)。

使用

将打印

空的


非空的

您可以这样设置空Guid:

DECLARE @EmptyGuid UNIQUEIDENTIFIER
SET @EmptyGuid = (SELECT CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER))

-- Single result is 00000000-0000-0000-0000-000000000000
SELECT @EmptyGuid

您可以使用此替代语法获取空guid强制转换(0x0作为唯一标识符)@Robert+1,以便使用0x0而不是2次强制转换。这一次或检查“If@Param='00000000-0000-0000-0000-000000000000'?”@JoãoAntunes-与大多数事情一样,通常更重要的是可读性更强且不易出错,即使有一些速度差。就我个人而言,我喜欢
0x0
方法,因为你不会想知道
0
s和
-
s的数量是否正确。就性能而言,很难测量,因为它们都很快,但在我的天真测量中,它们是无法区分的,每一个大约需要1微秒,即每秒可以进行1000000次投射。欢迎使用堆栈溢出!回答问题之前,请阅读和“”。StaticCodeAnalysis错误:SR0014:从ASCII字符串(36)转换为UniqueIdentifier时可能会发生数据丢失。@user2323308-这是一个误判。我们正在将该值设置为常量。没有数据丢失的空间。
DECLARE @param UNIQUEIDENTIFIER = NEWID();
--DECLARE @param UNIQUEIDENTIFIER = '00000000-0000-0000-0000-000000000000'

IF (CONVERT(UNIQUEIDENTIFIER, 0x00)) = @param
    PRINT 'Empty';
ELSE
    PRINT 'Not Empty';
DECLARE @EmptyGuid UNIQUEIDENTIFIER = 0x0
DECLARE @NonEmpty UNIQUEIDENTIFIER = NEWID()
IF @EmptyGuid = 0x0 PRINT 'Empty'
IF @NonEmpty = 0x0 PRINT 'Empty' ELSE PRINT 'NonEmpty'
DECLARE @EmptyGuid UNIQUEIDENTIFIER
SET @EmptyGuid = (SELECT CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER))

-- Single result is 00000000-0000-0000-0000-000000000000
SELECT @EmptyGuid