Liquibase-update中的SQl服务器异常,在创建列类型为varchar的表时(2147483647)

时间:2014-01-29 12:46:56

标签: sql-server liquibase

使用Liquibase 3.1.1,我试图动态地在任意两个SQl服务器数据库之间迁移Db脚本。

我正在使用Liquibase的Diff和更新命令。它正在与Db一起工作,它不使用varchar(max)列。 对于使用varchar(max)列的DB,liquibase使用VARCHAR(2147483647)进行varchar(max),同时创建changelog,当它更新目标db时,抛出以下sql server异常。

liquibase.exception.DatabaseException: Error executing SQL CREATE TABLE [ASSET_ATTRIBUTE] ([ASSET_ATTR_ID] BIGINT IDENTITY (1, 1) NOT NULL, [ASSET_GUID] UNIQUEIDENTIFIER NOT NULL, [APP_ID] VARCHAR(30), [ATTR_TYPE] VARCHAR(30) NOT NULL, [ATTR_NAME] VARCHAR(50) NOT NULL, **[ATTR_VALUE_STRING] VARCHAR(2147483647)**, [ATTR_VALUE_DATE] datetime, CONSTRAINT [PK_ASSET_ATTRIBUTE] PRIMARY KEY ([ASSET_ATTR_ID])): The size (2147483647) given to the column 'ATTR_VALUE_STRING' exceeds the maximum allowed for any data type (8000).
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:61)
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:106)
    at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1189)
    at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1172)
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:352)
    ... 4 more

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The size (2147483647) given to the column 'ATTR_VALUE_STRING' exceeds the maximum allowed for any data type (8000).
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:792) and some more

即使它是一个sql server异常,我需要通过liquibase修复它。 有没有解决这个问题? 为什么liquibase不将列类型存储为varchar(max),而不是varchar(2147483647),以便在更新期间不会抛出异常。

先谢谢

0 个答案:

没有答案