Frage

Ich brauche eine sichere (das heißt konsistent, robust) Art und Weise der Erfassung, ob der SQL Server ich Zugriff auf SQL Express ist. Ich glaube, ich würde es vorziehen, um dies von TSQL zu tun, da ich bereits eine Verbindungszeichenfolge haben und alle Bibliotheken muss ich ausführen TSQL (diese Probleme vermeiden helfen sollte, ob nicht WMI installiert ist / Laufen, muss der Benutzer Berechtigungen der Registrierung usw. zuzugreifen).

Kennt jemand eine Möglichkeit, dies zu tun?

Danke.

PS: Grundsätzlich mag ich, dies zu tun, so kann ich meine Datenbankgröße gegen die 4gb Grenze überwachen und Maßnahmen ergreifen, wenn ich es Ansatz ... aber wenn ich auf einer vollständigen SQL Server-Edition renne dann will ich nicht der Code sich darum kümmern, da es keine (praktisch) hart codiert Grenze. Ich konnte in meinem Programm in einer manuellen Einstellung setzen, aber es wäre viel schöner, wenn der Code genau das Richtige automatisch tut, daher die Notwendigkeit zu wissen, ob der Server der ‚Express‘ Edition ist oder nicht.

War es hilfreich?

Lösung

Es gibt eine Reihe von Möglichkeiten:

EXEC sp_server_info 2

oder

SELECT @@version

oder

SELECT serverproperty('ProductVersion')

Sie können dies auch tun:

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'

Weitere Informationen unter: http: //blog.devstone .com / aaron / default, Datum, 2006-12-15.aspx

Andere Tipps

Mit

SELECT SERVERPROPERTY('EditionID')

oder

SELECT SERVERPROPERTY('Edition')

zu ermitteln, welche Version von SQL Server ausgeführt wird.

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

Dies wird 0 zurückgeben, wenn es nicht ist, und etwas nicht-Null (126 hier), wenn er:

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

Beispiel in einem Booleschen Kontext:

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

Sie können SERVERPROPERTY('Edition') verwenden, welche zurückkehren "Express Edition"

Die SERVERPROPERTY Funktion wurde bereits in mehreren anderen Antworten erwähnt, aber es gibt eine bessere Lösung als die Überprüfung, ob eine Zeichenfolge „Express Edition“:. das EngineEdition Argument, die einen Wert zurückgibt int

Zitat aus dem Link:

  

EngineEdition

     

Database Engine Ausgabe der Instanz von SQL Server auf die installierte   Server.

     

1 = Personal oder Desktop Engine (nicht in SQL Server 2005 verfügbar und   spätere Versionen).

     

2 = Standard (Dies ist für die Standard-zurückgegeben, Web- und Geschäft   Intelligenz).

     

3 = Enterprise (Dies wird zurückgegeben für Evaluation, Developer und beide   Enterprise Edition).

     

4 = Express (Dies ist für Express zurück, Express mit Werkzeugen und   Express mit Advanced Services)

     

5 = SQL-Datenbank

     

6 - SQL Data Warehouse

     

Basis-Datentyp: int

So können Sie für Express Edition wie folgt überprüfen:

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

Was passiert in SQL Server Express, wenn Sie die Größe nicht überwachen, sondern bis an die Grenze bekommen? Gibt es Warnungen zuerst? Ereignisse im Ereignisprotokoll?

Wenn ja, dann könnten Sie besser machen SQL Server zu ermöglichen, die Warnungen zu erteilen, und dann nur auf sie hören. Das gleiche könnte auch gelten für eine SQL Server Enterprise-Installation, wenn eine Festplatte voll ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top