Domanda

Ho bisogno di un (robusta cioè coerente,) metodo sicuro di rilevare o meno il server sql sto accedendo è SQL Express. Penso che io preferirei essere in grado di fare questo da TSQL, dal momento che ho già una stringa di connessione e tutte le librerie di cui ho bisogno per eseguire TSQL (questo dovrebbe contribuire ad evitare problemi con se WMI è installato / corsa, l'utente ha i permessi per accedere al registro di sistema, ecc).

Qualcuno sa di un modo per fare questo?

Grazie.

PS: Fondamentalmente io voglio fare questo in modo da poter monitorare la mia dimensione del database contro il limite di 4 GB e prendere provvedimenti quando mi avvicino ... ma se sono in esecuzione su un'edizione completa di SQL Server, allora non voglio il codice di preoccuparsi perché non c'è (pratico) limite hard coded. Potrei messo in un'impostazione manuale nel mio programma, ma sarebbe molto più bello se il codice appena fatto automaticamente la cosa giusta, da qui la necessità di sapere se il server è in edizione l' 'Express' o meno.

È stato utile?

Soluzione

Ci sono un certo numero di modi:

EXEC sp_server_info 2

o

SELECT @@version

o

SELECT serverproperty('ProductVersion')

Puoi anche fare questo:

DECLARE @ver nvarchar(128)
SET @ver = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @ver = SUBSTRING(@ver, 1, CHARINDEX('.', @ver) - 1)
IF ( @ver = '8' )
   SELECT 'SQL Server 2000'
ELSE IF ( @ver = '9' )
   SELECT 'SQL Server 2005'
ELSE
   SELECT 'Unsupported SQL Server Version'

Maggiori informazioni su: http: //blog.devstone .com / Aaron / default, la data, 2006-12-15.aspx

Altri suggerimenti

Usa

SELECT SERVERPROPERTY('EditionID')

o

SELECT SERVERPROPERTY('Edition')

per rilevare quale versione di SQL Server è in esecuzione.

http://msdn.microsoft.com/en-us/library/ ms174396.aspx

Ciò restituirà 0 se non lo è, e qualcosa di diverso da zero (126 qui) se si tratta di:

select charindex('Express Edition',@@version)

Esempio in un contesto booleano:

if (select charindex('Express Edition',@@version)) > 0
    begin
        print 'Express edition!'
    end
else
    begin
        print 'Not Express edition!'
    end

È possibile utilizzare SERVERPROPERTY('Edition') che restituirà "Express Edition"

Il SERVERPROPERTY funzione è stato già citato in molteplici altre risposte, ma c'è una soluzione migliore di controllare se una stringa contiene "Express Edition":. l'argomento EngineEdition, che restituisce un valore int

Citazione dal link:

  

ENGINEEDITION

     

edizione del motore di database dell'istanza di SQL Server installata sul   server.

     

1 = personale o Desktop Engine (non disponibile in SQL Server 2005 e   le versioni successive).

     

2 = Standard (Questo viene restituito per la standard, Web e Business   Intelligenza.)

     

3 = Enterprise (Questo viene restituito per la valutazione, Developer, ed entrambi   edizioni Enterprise).

     

4 = Express (Questo viene restituito per Express, espresso con strumenti e   Express con Advanced Services)

     

5 = SQL database

     

6 - SQL Data Warehouse

     

tipo di dati di base: int

Così si può verificare la presenza di Express Edition in questo modo:

if SERVERPROPERTY('EngineEdition') = 4
    begin
        select 'Express'
    end
else
    begin
        select 'not Express'
    end

Che cosa succede in SQL Server Express se non monitorare le dimensioni, ma arriva al limite? Ci sono avvertimenti prima? Eventi in caso log?

Se è così, allora si potrebbe fare di meglio per consentire a SQL Server di emettere gli avvertimenti, e poi basta ascoltarli. Lo stesso può ben applicare per un'installazione di SQL Server Enterprise se un disco è pieno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top