2012-02-29 6 views
57

Estoy tratando de detectar si el servidor ejecuta Express Edition.¿Hay StartsWith o contiene en t sql con variables?

Tengo los siguientes t sql.

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

print @edition 

En mi ejemplo, @edition = Express Edition (64-bit)

¿Cómo puedo realizar lo siguiente? (C# inspirado).

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

Respuesta

67

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

Ejemplos:

Uso left función:

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

o A partir de SQL Server 2012, puede utilizar la función iif:

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

o el uso de la función charindex:

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

Parece que lo que quiere es http://msdn.microsoft.com/en-us/library/ms186323.aspx.

En su ejemplo sería (comienza con):

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

o contiene

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

Esto debe marcarse como la respuesta aceptada. –

+0

¿Por qué no utilizar LIKE 'Express Edition%'? Además, ¿su solución no es verdadera de "Express Edition" en algún lugar de la cadena? Por lo tanto, es más específicamente solo una forma de "Contiene" de hacerlo – mmcrae

+2

@mmcrae Al usar la versión similar a continuación estaría bien, esta fue la primera forma que se me ocurrió y se parece más a lo que tenía el OP. Además, la primera expresión solo devolverá verdadero si la variable comienza con (charindex devuelve 1) el argumento dado. La segunda expresión es un contiene, ya que devolverá verdadero si el argumento se encuentra en cualquier lugar de la cadena (charindex devuelve 1 o mayor). –

19

me gustaría utilizar

like 'Express Edition%' 

Ejemplo:

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

Si lee la pregunta, no es una consulta. Pruebe mi ejemplo con su respuesta y luego actualice su respuesta para mostrar que funciona. –

+0

Puedes usar like en if-statements en t-sql. Es por eso que uso como. No veo por qué quieres darme menos puntos por eso, pero por qué no. –

+0

que funciona bien. gracias por el sabor adicional. –