首页 > 解决方案 > 为条件索引生成的 Liquibase 代码在 MS SQL Server 中出现错误

问题描述

我的 SQL Server 数据库中有以下索引

CREATE NONCLUSTERED INDEX XCR_ACTIVE ON dbo.CS_PA_VEH_BASE ( ETL_ACTIVE_FL ) WHERE ETL_ACTIVE_FL = 'N' ON "default";

为此liquibase给出以下内容:

   <createIndex indexName="XCR_ACTIVE" tableName="CS_PA_VEH_DELTA">
        <column computed="true" name="([ETL_ACTIVE_FL]='N')"/>
    </createIndex>

但是当我想执行它时(也在 MS SQL Server 中)我得到以下

> **Error:**  (14.2) 05-24-19 11:43:05 (E) (13004:15088) RUN-050304: |Session JOB_ODS_Liquibase Function call <raise_exception ( Liquibase
> update error: 1: Unexpected error running Liquibase: Incorrect syntax
> near '('. [Failed SQL: CREATE NONCLUSTERED INDEX XCR_ACTIVE ON
> [dbo].[CS_PA_VEH_DELTA](([ETL_ACTIVE_FL]='N'))] ) > failed, due to
> error <50316>: <Liquibase update error:-1: Unexpected error running
> Liquibase: Incorrect syntax near '('. [Failed SQL: CREATE NONCLUSTERED
> INDEX XCR_ACTIVE ON [dbo].[CS_PA_VEH_DELTA](([ETL_ACTIVE_FL]='N'))]>.

我希望这不是第一次发生在某人身上。

标签: liquibase

解决方案


标准 Liquibase 文档中没有提到“带过滤器的索引”: https ://www.liquibase.org/documentation/changes/create_index.html 但 Nathan 在这里提到的内容http://forum.liquibase.org/topic/how -to-create-conditional-indexes-using-createindex?reply=true关于 modifySQL 应该可以工作。


推荐阅读