2010-06-22 17 views

risposta

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

Questo dovrebbe restituire il guid vuoto.

... o anche più brevi, risparmiando un getto:

SELECT CAST(0x0 AS UNIQUEIDENTIFIER) 

Quindi, per verificare la presenza di questo, si farebbe

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

si potrebbe usare questo sintassi alternativa per ottenere un cast vuota guid (0x0 AS UNIQUEIDENTIFIER) – Robert

+0

@ Robert +1 per l'utilizzo di 0x0 piuttosto che 2 calchi. – twoleggedhorse

+1

qual è il rendimento migliore o "Se @Param = '00000000-0000-0000-0000-000000000000'?" –

9

Dal momento che la guid vuoto non cambia mai, l'altro modo è ovvio semplicemente usare 00000000-0000-0000-0000-000000000000 piuttosto che calcolarlo.

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

Oppure, se in una procedura, è possibile impostare un parametro di agire come una costante:

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

Oppure si potrebbe creare una funzione definita dall'utente scalare che restituisce semplicemente il valore costante al di sopra (o ricalcola come nella soluzione di Meiscooldude).

1

quanto riguarda il controllo è nullo:

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

set @ SupplierDataHubId = (selezionare HubId da dbo.tblSupplierData dove fldUpc = '603.259.049.389' O fldEan = '6032590493895555 ') if (@SupplierDataHubId non è nullo) inizio
stampa (' sì '); fine

altro print 'no'