2017-09-08 2 views
1

Je souhaite demander le nom de service d'un serveur SQL. Habituellement, je le fais avecDéterminez @@ nom_service sur SQL Server et l'erreur de capture est levée par Azure

SELECT @@SERVICENAME 

Mais cela ne fonctionne pas sur les bases de données hébergées Azure. Je cherche un moyen de déterminer le nom du service, avec un try catch fallback si je suis connecté à une base de données azur. La prise d'essai habituelle ne fonctionne pas pour moi - en raison de l'erreur de compilation pour l'instruction. Comment puis-je attraper cette erreur de compilation?

enter image description here

+0

Essayez 'DECLARE @T TABLE (ServiceName NVARCHAR (255)) ; INSERT @T (ServiceName) EXEC ('SELECT @@ SERVICENAME') '. Cela donnera toujours une erreur, mais je pense que vous pouvez au moins attraper celui-là. –

+0

Oh, et que diriez-vous de 'SERVERPROPERTY ('ServerName')'? Cela ne devrait pas donner une erreur de compilation et retourner juste 'NULL' sur Azure. Split sur la barre oblique inverse comme requis. –

+0

SELECT SERVERPROPERTY ('Edition') renvoie "SQL Azure" sur Azure, cette partie fonctionne correctement. – Gerd

Répondre

1

USE @@ version variable globale.

DECLARE @version VARCHAR(200) 
SELECT @version = SUBSTRING(@@version, 15,5) 
PRINT @version 

Espérons que cela aide.

+0

Cela renvoie 'Servir' sur ma machine - Je ne suis pas sûr de ce que c'est censé être, sauf comme un message subliminal. –

+0

Si elle renvoie "Serveur", cela signifie qu'il s'agit d'un serveur SQL sur site. Si elle renvoie "Azure", le code est exécuté sur une base de données SQL Azure. –

+0

Sauf que ce n'est pas ce qui nous intéresse, nous voulons le '@@ SERVICENAME'. Cela contiendra le nom d'instance de SQL Server si nous ne sommes pas sur Azure. Si vous voulez l'édition, 'SERVERPROPERTY ('Edition')' est plus pratique/fiable. –

2

Cette déclaration fonctionne dans les deux environnements sans erreur de compilation:

DECLARE @T TABLE(ServiceName NVARCHAR(255)); 
DECLARE @Rows INT 

IF SERVERPROPERTY('Edition') != 'SQL Azure' 
BEGIN TRY 
    INSERT @T(ServiceName) EXEC ('SELECT @@SERVICENAME') 
END TRY 
BEGIN CATCH 
END CATCH 

SELECT @Rows = COUNT(*) FROM @T 

IF @Rows = 0 
INSERT @T(ServiceName) Values ('SQL Azure') 

SELECT * FROM @T 

Sur le serveur local:

enter image description here

Sur Azure:

enter image description here