1

我正在使用“Azure SQL 数据库部署”任务将 dacpac 作为发布管道的一部分部署到 Azure。

我收到错误消息:“不能在表或索引视图‘表’上使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引。”

dacpac 部署到的表是一个空数据库,每次都在之前的 Azure CLI 任务中创建并在稍后的部署中删除。

这些问题似乎是订购的问题......

调查发布脚本显示:

第 2489 行 - 创建全文索引目录

第 70374 行 - 创建存储过程 - 此处失败

第 80491 行 - 在表格上创建全文

所以存储过程是在它所依赖的全文索引之前创建的。

我努力了:

  • 在“附加 SqlPackage.exe 参数”中添加/p:IncludeTransactionalScripts=True(据我所知,这没有区别)
  • 在执行任何其他操作之前手动添加全文索引的预部署脚本。这也失败了。由于它需要添加索引的表在部署前阶段还没有存在。

临时工作:

值得注意的是,我有一个临时工作。在那里,我让“Azure SQL 数据库部署”任务运行了两次。第一次抛出错误,但选择了“继续出错”,然后第二次成功。这感觉真的很糟糕而且很糟糕。

4

1 回答 1

0

一种丑陋的方法是在存储过程中使用动态 SQL:

CREATE PROCEDURE proc(@desc NVARCHAR(100))
AS
BEGIN
  SELECT * FROM tab WHERE CONTAINS(col, @desc);
END;

=> 
CREATE PROCEDURE proc(@desc NVARCHAR(100))
AS
BEGIN
  EXEC sp_executesql 
       N'SELECT * FROM tab WHERE CONTAINS(col, @desc)', 
       N'@desc NVARCHAR(100)', 
       @desc;
END;

缺点:

  • 没有对象检查(它不是静态代码)
  • 上下文切换(可能会引入权限问题)
于 2019-08-22T19:27:56.380 回答