Sql server 如何使用保留键(key)修复表的创建?

Sql server 如何使用保留键(key)修复表的创建?,sql-server,spring-boot,unit-testing,h2,liquibase,Sql Server,Spring Boot,Unit Testing,H2,Liquibase,我使用liquibase初始化h2数据库以进行单元测试,但有一个表使用“key”作为列名存在问题 我尝试使用“\u key”作为名称,但数据库(我无法更改其模式)使用“key”作为列名,因此我必须将@column(“\”key\”)放在我的域类中。这适用于SQL Server(生产数据库),但不适用于h2(用于测试的内存数据库) 在Liquibase xml中:(用于单元测试) 因此,我必须取消对第一个选项的注释,并对第二个选项进行注释,以使单元测试正常工作,反之则使应用程序正常工作 使用 @C

我使用liquibase初始化h2数据库以进行单元测试,但有一个表使用“key”作为列名存在问题

我尝试使用“\u key”作为名称,但数据库(我无法更改其模式)使用“key”作为列名,因此我必须将@column(“\”key\”)放在我的域类中。这适用于SQL Server(生产数据库),但不适用于h2(用于测试的内存数据库)

在Liquibase xml中:(用于单元测试)

因此,我必须取消对第一个选项的注释,并对第二个选项进行注释,以使单元测试正常工作,反之则使应用程序正常工作

使用

@Column(name=“\”key\”,长度=100)
具有

返回一个错误:

架构验证:表[displaymessages]中缺少列[key]

创建表的查询是:

CREATE TABLE PUBLIC.displaymessages (
  id BIGINT AUTO_INCREMENT NOT NULL,
  "'key'" VARCHAR(100),
  value VARCHAR(1000),
  type INT NOT NULL,
  createdon date NOT NULL,
  modifiedon date,
  isdeleted INT NOT NULL,
  CONSTRAINT PK_DISPLAYMESSAGES PRIMARY KEY (id)
)

在创建表/列的变更集上,您可以添加一个属性
objectQuotingStrategy
,其值为
QUOTE\u ALL\u OBJECTS
,如下例所示:

<changeSet author="Sir Cuke Umber" id="1::addTable::labelA" labels="AAA" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
    <createTable tableName="LABELA">
        <column name="message" type="TEXT">
            <constraints nullable="true" primaryKey="false" unique="false"/>
        </column>
    </createTable>
</changeSet>


如果希望引用每个标识符,还可以在根changelog级别添加此属性

谢谢你的回复,我测试了你的建议,但不起作用。测试没有找到表本身<代码>架构验证:缺少表[displaymessages]数据库中表的实际名称是什么?引用的问题是,许多数据库都有自动改变大小写的行为,这可能是有问题的。例如,Oracle在创建名为
test
且不带引号的对象时,实际上会创建名为
test
的对象(全部大写)。但是如果用引号创建
“test”
,实际对象将命名为
test
(小写,如create语句中所指定)。如果您使用的是两个处理方式不同的平台,并且对象已经存在,那么添加引号可能会导致您看到的行为。谢谢Steve,我认为引用不会解决我的问题。那么,让我们回到主问题,有没有一种方法可以让h2保留字处理像sqlserver处理一样工作?我的意思是使用sqlserver使用双引号可以工作,但是h2不起作用:(没有内置的,没有。你需要编写一个插件/扩展来表达你想要的自定义功能。
CREATE TABLE PUBLIC.displaymessages (
  id BIGINT AUTO_INCREMENT NOT NULL,
  "'key'" VARCHAR(100),
  value VARCHAR(1000),
  type INT NOT NULL,
  createdon date NOT NULL,
  modifiedon date,
  isdeleted INT NOT NULL,
  CONSTRAINT PK_DISPLAYMESSAGES PRIMARY KEY (id)
)
<changeSet author="Sir Cuke Umber" id="1::addTable::labelA" labels="AAA" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
    <createTable tableName="LABELA">
        <column name="message" type="TEXT">
            <constraints nullable="true" primaryKey="false" unique="false"/>
        </column>
    </createTable>
</changeSet>