Próbuję wykryć, czy na serwerze działa wersja Express Edition.
Mam następujący t sql.
DECLARE @edition varchar(50);
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar)
print @edition
W moim przypadku @edition = Express Edition (64-bit)
Jak mogę wykonać następujące czynności? (Inspirowane C #).
DECLARE @isExpress bit;
set @isExpress = @edition.StartsWith('Express Edition');
sql
sql-server-2008
tsql
Valamas
źródło
źródło
colName LIKE 'prefix%'
będzie bardzo szybkie pocolName
indeksowaniu, alecolName LIKE '%substring%'
lubcolName LIKE '%suffix'
będzie wolne, ponieważ SQL Server nie tworzy drzew sufiksów podczas indeksowania tekstu. Podobnie używanieLEFT
z kolumną będzie również powolne, ponieważ te zapytania nie są SARGable. SARGability jest ważna: dba.stackexchange.com/questions/162263/…Wygląda na to, że chcesz http://msdn.microsoft.com/en-us/library/ms186323.aspx .
W twoim przykładzie byłoby to (zaczyna się od):
set @isExpress = (CharIndex('Express Edition', @edition) = 1)
Albo zawiera
set @isExpress = (CharIndex('Express Edition', @edition) >= 1)
źródło
Express Edition%
? Ponadto, czy Twoje rozwiązanie nie zwraca prawdy, czy „Express Edition” jest w dowolnym miejscu w ciągu? Jest to więc bardziej konkretny sposób na zrobienie tego w stylu „zawiera”użyłbym
Przykład:
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
źródło