Sql server 确定SQL Server上的@Servicename,并捕获Azure引发的错误

Sql server 确定SQL Server上的@Servicename,并捕获Azure引发的错误,sql-server,azure,azure-sql-database,Sql Server,Azure,Azure Sql Database,我想请求SQL Server的servicename。通常我都是这样做的 SELECT @@SERVICENAME 但这在Azure托管的数据库上不起作用。我正在寻找一种确定servicename的方法,如果我连接到azure数据库,可以使用try-catch回退。由于语句的编译错误,通常的try-catch对我不起作用。如何捕获此编译错误 改用@version全局变量 DECLARE @version VARCHAR(200) SELECT @version = SUBSTRING(@@ve

我想请求SQL Server的servicename。通常我都是这样做的

SELECT @@SERVICENAME
但这在Azure托管的数据库上不起作用。我正在寻找一种确定servicename的方法,如果我连接到azure数据库,可以使用try-catch回退。由于语句的编译错误,通常的try-catch对我不起作用。如何捕获此编译错误


改用@version全局变量

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

希望这有帮助。

此语句在两种环境中都能正常工作,不会出现编译错误:

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 
在本地服务器上:

在Azure上:


尝试
声明@T表(servicenaminvarchar(255));插入@T(ServiceName)EXEC('SELECT@@ServiceName')
。这仍然会给出一个错误,但我认为您至少可以捕捉到这个错误。哦,
SERVERPROPERTY('ServerName')
怎么样?这不应该给出编译错误,只需在Azure上返回
NULL
。按要求在反斜杠上拆分。SELECT SERVERPROPERTY('Edition')在Azure上返回“SQL Azure”,这部分工作正常。谢谢Jeroen,在我的机器上使用表的方式处理meThis returns
SERVICE
——我不确定这应该是什么好消息,除非是潜意识消息。如果它返回“Server”这意味着它是一个内部部署的SQL Server。如果返回“Azure”,则代码正在SQL Azure数据库上运行。除了我们不感兴趣之外,我们需要
@@SERVICENAME
。如果我们不在Azure上,这将包含SQL Server的实例名称。如果您想要这个版本,
SERVERPROPERTY('edition')
更方便/可靠。