Question

J'ai besoin d'un moyen sûr (i.e. cohérente, solide) de détecter si le serveur SQL ou non j'accéder est Sql Express. Je pense que je préférerais être en mesure de le faire à partir TSQL, puisque je l'ai déjà une chaîne de connexion et toutes les bibliothèques que je dois exécuter TSQL (ce qui devrait permettre d'éviter des problèmes avec ou non WMI est installé / en cours d'exécution, l'utilisateur a autorisations d'accéder au registre etc).

Quelqu'un sait-il d'une façon de le faire?

Merci.

PS: En fait, je veux faire ce que je peux contrôler ma taille de base de données dans la limite de 4gb et prendre des mesures quand j'approche ... mais si je suis en cours d'exécution sur une édition complète du serveur sql alors je ne veux pas le code de s'inquiéter à ce sujet car il n'y a pas (pratique) limite codée en dur. Je pourrais mettre dans un manuel dans mon programme, mais il serait beaucoup plus agréable si le code a juste fait la bonne chose automatiquement, d'où la nécessité de savoir si le serveur est la édition 'Express ou non.

Était-ce utile?

La solution

Il y a plusieurs façons:

EXEC sp_server_info 2

ou

SELECT @@version

ou

SELECT serverproperty('ProductVersion')

Vous pouvez également faire ceci:

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'

Plus d'infos sur: http: //blog.devstone .com / aaron / default, date, 2006-12-15.aspx

Autres conseils

Utilisez

SELECT SERVERPROPERTY('EditionID')

ou

SELECT SERVERPROPERTY('Edition')

pour détecter la version de SQL Server est en cours d'exécution.

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

Ceci renvoie 0 si ce n'est pas, et quelque chose de zéro (126 ici) si elle est:

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

Exemple dans un contexte booléen:

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

Vous pouvez utiliser SERVERPROPERTY('Edition') qui retournera "Express Edition"

fonction SERVERPROPERTY a déjà été mentionné dans plusieurs autres réponses, mais il y a une meilleure solution que de vérifier si une chaîne contient « express Edition »:. l'argument EngineEdition, qui renvoie une valeur int

Citation du lien:

  

EngineEdition

     

Base de données édition du moteur de l'instance de SQL Server installée sur le   serveur.

     

1 = Personal ou Desktop Engine (Non disponible dans SQL Server 2005 et   les versions ultérieures.)

     

2 = standard (Ceci est retourné pour Standard, Web et entreprise   Intelligence).

     

= 3 Enterprise (Ceci est retourné pour l'évaluation, développeur, et les deux   éditions Enterprise.)

     

4 = Express (Ceci est retourné pour Express, Express avec outils et   Express avec Advanced Services)

     

5 = Base de données SQL

     

6 - Data Warehouse SQL

     

type de données de base: int

Vous pouvez vérifier Express Edition comme ceci:

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

Qu'est-ce qui se passe dans SQL Server Express si vous ne surveillez pas la taille, mais arriver à la limite? Y at-il des avertissements d'abord? Événements du journal des événements?

Si oui, alors vous pourriez faire mieux pour permettre SQL Server pour émettre les avertissements, et puis juste écouter. La même chose pourrait bien demander une installation de SQL Server Enterprise si un disque est plein.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top