liquibase - 为条件索引生成的 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 文档中没有提到“带过滤器的索引”: 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 应该可以工作。