收到 Liquibase SQL Server 错误"找不到对象...因为它不存在或您没有权限'



我有一个在Docker容器中运行的演示SQL Server数据库,我正在上面测试Liquibase。我创建了一个变更日志文件,并放入了两个变更集,它们将从特定表中删除两列。

这是我的Liquibase变更日志文件:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd
http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.6.xsd ">
<changeSet id="1" author="mdailey">
<dropColumn tableName="Sales.Invoices" columnName="RunPosition">
</dropColumn>
</changeSet>
<changeSet id="2" author="mdailey">
<dropColumn tableName="Sales.Invoices" columnName="DeliveryRun">
</dropColumn>
</changeSet>
</databaseChangeLog>

当我运行liquibase update时,我不断收到以下错误:

Unexpected error running Liquibase: Cannot find the object "Sales.Invoices" because it does not exist or you do not have permissions. [Failed SQL: (4902) ALTER TABLE [Sales.Invoices] DROP COLUMN RunPosition]

我使用的是微软提供的WideWorldImporters示例数据库。模式是Sales,因此表名是正确的。我有一个名为sqladmin的用户和登录名,登录信息在Liquibase属性文件中。这是属性文件:

# Enter the path for your changelog file.
changeLogFile=changelog/db.changelog-root.xml
# Enter the Target database 'url' information #
liquibase.command.url=jdbc:sqlserver://localhost:1401;database=WideWorldImporters
# Enter the username for your Target database.
liquibase.command.username: sqladmin    
# Enter the password for your Target database.
liquibase.command.password: <StrongPassword>

我向db_datawriter角色添加了sqladmin,这样它就有足够的权限。当我在SQL Server中以"sqladmin"的身份运行T-SQL语句以从同一表中删除同一列时,它会成功执行。我认为问题出在Liquibase,但我不知道是什么。

感谢@SMor的建议,我找到了解决方案。

在变更集中,您不需要在表前面添加模式名称,而是需要将其作为一个单独的属性添加。

<changeSet id="1" author="mdailey">
<dropColumn schemaName="Sales" tableName="Invoices" columnName="RunPosition">
</dropColumn>
</changeSet>

相关内容

  • 没有找到相关文章

最新更新