C# 检测 SQL 数据库是不是为 PaaS(Amazon RDS 或 Azure SQL)
Posted
技术标签:
【中文标题】C# 检测 SQL 数据库是不是为 PaaS(Amazon RDS 或 Azure SQL)【英文标题】:C# detect if SQL database is PaaS (Amazon RDS or Azure SQL)C# 检测 SQL 数据库是否为 PaaS(Amazon RDS 或 Azure SQL) 【发布时间】:2021-11-11 00:19:27 【问题描述】:我们在 .NET 应用程序中开发了自己的 SQL 数据库连接实用程序,但是如果它连接的 SQL 数据库是 PaaS 数据库,例如 Amazon RDS 或 Azure SQL,我们希望它的行为有所不同。原因是,我们希望在这些情况下禁用通过我们的实用程序备份和恢复数据库的功能。
检测此问题的最佳、万无一失的方法是什么?
其他一些帖子建议使用 SELECT SERVERPROPERTY ('edition')
,但它适用于 Azure SQL,但对于 Amazon RDS 数据库仅返回“Express Edition(64 位)”。
【问题讨论】:
这能回答你的问题吗? How to test if database is hosted on SQL Azure? 真正的问题不是托管在哪里,而是检测连接字符串是否有足够的权限来执行操作。例如,数据库可以托管在共享公共云环境中的标准版本中...... 另外:***.com/questions/35915024/… 【参考方案1】:-
检查 DB 是否为 Azure SQL,
IF ServerProperty('Edition') = 'SQL Azure'
PRINT 'true'
或
SELECT CASE ServerProperty('EngineEdition')
WHEN 1 THEN 'Personal'
WHEN 2 THEN 'Standard'
WHEN 3 THEN 'Enterprise'
WHEN 4 THEN 'Express'
WHEN 5 THEN 'SQL Database'
WHEN 6 THEN 'Azure Synapse Analytics'
WHEN 8 THEN 'Azure SQL Managed Instance'
WHEN 9 THEN 'Azure SQL Edge'
WHEN 11 THEN 'Azure Synapse serverless SQL pool'
ELSE 'Unknown'
END
-
检查数据库是否为 Amazon RDS-
if CHARINDEX(N'EC2AMAZ',(cast(serverproperty('ServerName') as nvarchar(256))))>0
return 1
else
return 0
或
SELECT CASE WHEN db_id('rdsadmin') IS NULL THEN 0 ELSE 1 END AS RDS_DATABASE;
【讨论】:
以上是关于C# 检测 SQL 数据库是不是为 PaaS(Amazon RDS 或 Azure SQL)的主要内容,如果未能解决你的问题,请参考以下文章