处理对象因不同 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
我在 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