2012-02-29 6 views
57

Sto cercando di rilevare se il server esegue Express Edition.C'è StartsWith o contiene in t sql con variabili?

Ho il seguente t sql.

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar) 

print @edition 

Nel mio caso, @edition = Express Edition (64-bit)

come posso fare la seguente? (Ispirato al C#).

DECLARE @isExpress bit; 
set @isExpress = @edition.StartsWith('Express Edition'); 

risposta

67

StartsWith: left(@edition, 15) = 'Express Edition' o charindex('Express Edition', @edition) = 1.
Contains: charindex('Express Edition', @edition) >= 1

Esempi:

Uso left funzione:

set @isExpress = case when left(@edition, 15) = 'Express Edition' then 1 else 0 end 

o che iniziano con SQL Server 2012, è possibile utilizzare la funzione iif:

set @isExpress = iif(left(@edition, 15) = 'Express Edition', 1, 0); 

o utilizzando la funzione charindex:

set @isExpress = iif(charindex('Express Edition', @edition) = 1, 1, 0); 
64

Sembra che ciò che si vuole è http://msdn.microsoft.com/en-us/library/ms186323.aspx.

Nel tuo esempio, sarebbe (inizia con):

set @isExpress = (CharIndex('Express Edition', @edition) = 1) 

o contiene

set @isExpress = (CharIndex('Express Edition', @edition) >= 1) 
+2

Questo dovrebbe essere contrassegnato come la risposta accettata. –

+0

Perché non utilizzare LIKE 'Express Edition%'? Inoltre, la tua soluzione non restituisce true di "Express Edition" è ovunque nella stringa? Quindi è più specificamente un modo "Contiene" di farlo – mmcrae

+2

@mmcrae Mentre usare la versione simile qui sotto andrebbe bene, questo è stato il primo modo che mi è venuto in mente e sembra più simile a quello che l'OP aveva. Inoltre, la prima espressione restituirà true solo se la variabile inizia con (charindex restituisce 1) l'argomento specificato. La seconda espressione è a contiene poiché restituirà true se l'argomento è trovato in qualsiasi punto della stringa (charindex restituisce 1 o maggiore). –

19

userei

like 'Express Edition%' 

Esempio:

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar) 

DECLARE @isExpress bit 
if @edition like 'Express Edition%' 
    set @isExpress = 1; 
else 
    set @isExpress = 0; 

print @isExpress 
+0

Se si legge la domanda, non si tratta di una query. Prova il mio esempio con la tua risposta e quindi aggiorna la risposta mostrando che funziona. –

+0

Puoi usare come in if-statement in t-sql. Questo è il motivo per cui uso come. Non vedo perché vuoi darmi meno punti per questo, ma perché no. –

+0

che funziona bene. grazie per il sapore in più. –