Sql server 用于标识当前SQL Server版本是否支持columnstore索引的查询

Sql server 用于标识当前SQL Server版本是否支持columnstore索引的查询,sql-server,tsql,feature-detection,columnstore,Sql Server,Tsql,Feature Detection,Columnstore,我有一个存储过程,可以创建一些动态表。如果SQL Server的主机版本支持列存储索引,那么我想创建一个列存储索引,否则只能创建一个普通的行存储索引 我找到了dm_db_persistend_sku_features表,但它只告诉您当前正在使用哪些非标准功能,而不是支持哪些功能: SELECT * FROM sys.dm_db_persisted_sku_features 如何从查询内部确定SQL Server版本和版本是否支持columnstore索引?您可以检查当前数据库的兼容性级别,查看

我有一个存储过程,可以创建一些动态表。如果SQL Server的主机版本支持列存储索引,那么我想创建一个列存储索引,否则只能创建一个普通的行存储索引

我找到了
dm_db_persistend_sku_features
表,但它只告诉您当前正在使用哪些非标准功能,而不是支持哪些功能:

SELECT * FROM sys.dm_db_persisted_sku_features

如何从查询内部确定SQL Server版本和版本是否支持columnstore索引?

您可以检查当前数据库的兼容性级别,查看它是否与2012+功能兼容

select 
  ColumnStore = case 
    when compatibility_level >= 110 
        and (serverproperty ('edition') like 'Enterprise%'
          or serverproperty ('edition') like 'Developer%')
      then 1 
    when compatibility_level >= 130 
      and serverproperty ('productlevel') != 'RTM'
      then 1 
    else 0 
    end
  from sys.databases 
  where name = db_name()
注:

SELECT * from sys.system_objects where name='column_store_dictionaries'

存在于不支持columnstore索引的版本上(例如2014 Express)

为什么不检查该版本?只有企业版支持SQL Server 2016 SP1I之前的columnstores,但我必须了解SQL Server版本/service Pack的各种变化。此外,这不是一个非常适合未来的解决方案。事实上,它是。2016年SP1之前,只有企业版和开发版支持columnstores。您可以使用
选择SERVERPROPERTY('Edition')
进行检查。2016 SP1增加了对所有内容的支持。没有傻瓜式的解决方案,您必须检查SQL server的版本、数据库的兼容性级别well@MarkRobinson在任何情况下,您所要求的都不是产品功能。也许,您应该检查是否存在特定于columnstore的视图,例如从sys.system\u对象中选择*,其中name='column\u store\u dictionaries'兼容性级别没有帮助。即使兼容级别为10,SQL Server 2014+仍将继续。它们将以行模式处理,如果OP想知道是否应该在数据库上创建列存储索引,这不是返回最佳操作过程吗?