Sql server 非企业版中的SQL Server联机索引

Sql server 非企业版中的SQL Server联机索引,sql-server,Sql Server,我正在尝试根据SQL Server edition实现逻辑: IF SERVERPROPERTY('EngineEdition') = 3 /* Enterprise */ OR SERVERPROPERTY('EngineEdition') = 5 /* SQL Azure */ BEGIN CREATE NONCLUSTERED INDEX IX_MobileDeviceId_with_include ON dbo.FineActivations (MobileDeviceId) INC

我正在尝试根据SQL Server edition实现逻辑:

IF SERVERPROPERTY('EngineEdition') = 3 /* Enterprise */ OR SERVERPROPERTY('EngineEdition') = 5 /* SQL Azure */
BEGIN
  CREATE NONCLUSTERED INDEX IX_MobileDeviceId_with_include ON dbo.FineActivations (MobileDeviceId) INCLUDE (ActivationTime, FineId) WITH (ONLINE = ON);
END
在SQL Server上,如果不满足,请在
中表示条件。但它仍然会产生以下错误:

联机索引操作只能在SQL Server的企业版中执行


有可能克服它吗?

不可能在Express edition中引用企业功能,它不会在语法上进行验证。您可以使用动态SQL进行变通

DECLARE @sqlcmd nvarchar(4000)
SET @sqlcmd = ' CREATE NONCLUSTERED INDEX IX_MobileDeviceId_with_include ON dbo.FineActivations (MobileDeviceId) INCLUDE (ActivationTime, FineId) '

if SERVERPROPERTY('EngineEdition') = 3 /* Enterprise */ OR SERVERPROPERTY('EngineEdition') = 5 /* SQL Azure */
begin 
set @sqlcmd = @sqlcmd +'
    with (online = on)'
end
else
begin
set @sqlcmd = @sqlcmd + '
    with (fillfactor = 80)'
end

if ((select indexproperty(object_id('FineActivations'),'IX_MobileDeviceId_with_include','IndexID')) is null)
BEGIN
    EXEC (@sqlcmd)
END

您确定错误消息来自您发布的代码段吗?您能否检查SQL Server Express实例上返回的
SERVERPROPERTY('EngineEdition')
是什么(应该是4)?