2010-06-22 37 views

Respuesta

74
SELECT CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER) 

Eso debería devolver el guid vacío.

... o incluso más corto, ahorrando un reparto:

SELECT CAST(0x0 AS UNIQUEIDENTIFIER) 

Así que para comprobar si hay, que haría

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

puede utilizar esta sintaxis alternativa para conseguir un reparto vacío GUID (0x0 AS UNIQUEIDENTIFIER) – Robert

+0

@ Robert 1 para el uso de 0x0 en lugar de 2 cilindros. – twoleggedhorse

+1

¿Qué tiene mejor rendimiento este o verificando "Si @Param = '00000000-0000-0000-0000-000000000000'?" –

9

Desde el GUID vacío nunca cambia, la otra forma es obvio simplemente use 00000000-0000-0000-0000-000000000000 en lugar de calcularlo.

If @Param = '00000000-0000-0000-0000-000000000000' 
... 

O, si en un procedimiento, se puede establecer un parámetro para actuar como una constante:

Declare @EmptyGuid uniqueidentifier 
Set @EmptyGuid = '00000000-0000-0000-0000-000000000000' 

O puede crear una función definida por el usuario escalar que simplemente devuelve el valor constante por encima de (o lo vuelve a calcular como en la solución Meiscooldude).

1

Qué acerca de la comprobación es nulo:

DECLARE @MyId as UNIQUEIDENTIFIER = (SELECT Id FROM dbo.MyTable WHERE ...) 
IF @MyId IS NULL 
BEGIN 
    RAISERROR ('Id is NULL!', 16, 1) 
    RETURN 
END 
0

DECLARE @SupplierDataHubId uniqueidentifier = null

conjunto @ SupplierDataHubId = (seleccione HubId de dbo.tblSupplierData donde fldUpc = '603259049389' O fldEan = '6032590493895555 ') if (@SupplierDataHubId no es nulo) begin
print (' yes '); final

demás de impresión 'no'

Cuestiones relacionadas