处理对象因不同 SQL 服务器版本而异

Handling objects being different for different SQL Server Versions

我在 Visual Studio 中创建了一个新的数据库项目,并一直在向其中添加我预先存在的对象。这是一个我们将部署到多个不同服务器的数据库,至少有两个不同版本的 sql 服务器。

我有一个查看可用性组的视图,如果服务器是 2016 年,则拉出 Is_Distributed 列。我需要在这个项目中使用一种方法来基本上保存两个版本,即 2014 年和 2016 年,并且能够根据我要部署到的服务器可能部署正确的版本。

这可以在 Visual Studio 秒内在数据库项目中完成吗?

一个解决方案是创建一个适用于两者的兼容性视图,然后引用它而不是 sys.availability_groups

在下面的 2016 年,is_distributed 将从 DMV 中删除,但在 2014 年,由于 DMV 中没有这样的列,它将从外部范围的 OptionalColumns 中删除,并且NULL 相反。

CREATE VIEW availability_groups_compat
AS
  SELECT ca.*
  FROM   (VALUES(CAST(NULL AS BIT))) OptionalColumns(is_distributed)
         CROSS APPLY (SELECT group_id,
                             name,
                             resource_id,
                             resource_group_id,
                             failure_condition_level,
                             health_check_timeout,
                             automated_backup_preference,
                             automated_backup_preference_desc,
                             version,
                             basic_features,
                             dtc_support,
                             db_failover,
                             is_distributed,
                             cluster_type,
                             cluster_type_desc,
                             required_synchronized_secondaries_to_commit,
                             sequence_number
                      FROM   sys.availability_groups) ca