Sql server 确定SQL Server上的@Servicename,并捕获Azure引发的错误
我想请求SQL Server的servicename。通常我都是这样做的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
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 returnsSERVICE
——我不确定这应该是什么好消息,除非是潜意识消息。如果它返回“Server”这意味着它是一个内部部署的SQL Server。如果返回“Azure”,则代码正在SQL Azure数据库上运行。除了我们不感兴趣之外,我们需要@@SERVICENAME
。如果我们不在Azure上,这将包含SQL Server的实例名称。如果您想要这个版本,SERVERPROPERTY('edition')
更方便/可靠。