You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何可靠判别数据库或SQL Server是否为Azure托管?

可靠判别Azure托管SQL数据库的方法

仅靠服务器域名判断的局限性

  • Azure SQL托管实例的域名格式并非database.windows.net结尾(例如xxx.public.yyy.database.windows.net),会导致漏判。
  • 若配置自定义域名指向Azure SQL数据库,域名不含database.windows.net,会导致误判。

推荐的可靠判别方法

方法1:通过SERVERPROPERTY('EngineEdition')属性判断

这是官方推荐的最可靠方式,不同Azure SQL服务对应明确的引擎版本取值:

  • 5 = Azure SQL Database
  • 6 = Azure Synapse Analytics
  • 8 = Azure SQL Managed Instance
  • 9 = Azure SQL Edge
  • 11 = Azure Synapse serverless SQL pool

C#实现代码:

using System.Data.SqlClient;
using System.Collections.Generic;

public class AzureSqlChecker
{
    public bool IsAzureManagedSql(string connectionString)
    {
        // 定义所有Azure托管SQL对应的引擎版本值
        var azureEngineEditions = new HashSet<int> { 5, 6, 8, 9, 11 };
        
        using (var connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (var command = new SqlCommand("SELECT SERVERPROPERTY('EngineEdition')", connection))
            {
                var result = command.ExecuteScalar();
                if (result != DBNull.Value && int.TryParse(result.ToString(), out int edition))
                {
                    return azureEngineEditions.Contains(edition);
                }
            }
        }
        return false;
    }
}

方法2:查询Azure特有的系统视图

sys.dm_db_resource_stats是Azure SQL Database和托管实例特有的性能统计视图,本地SQL Server不存在该视图。通过尝试查询该视图可判断是否为Azure托管:

C#实现代码:

using System.Data.SqlClient;

public class AzureSqlChecker
{
    public bool IsAzureManagedSql(string connectionString)
    {
        using (var connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (var command = new SqlCommand("SELECT 1 FROM sys.dm_db_resource_stats", connection))
            {
                try
                {
                    command.ExecuteScalar();
                    return true;
                }
                catch (SqlException)
                {
                    // 视图不存在,说明非Azure托管SQL
                    return false;
                }
            }
        }
    }
}

总结

优先使用方法1,因为它覆盖了所有Azure托管的SQL服务类型,不受域名配置影响,是最稳定可靠的判断方式。

内容的提问来源于stack exchange,提问作者the1.9gpaProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 10:50:43