【问题标题】:Unresolved Reference To Index Despite Its Existence尽管存在索引但未解决的参考
【发布时间】:2019-05-27 12:19:22
【问题描述】:

我正在尝试编写一个存储过程来删除列存储索引,索引创建脚本确实存在,与相关索引关联的表的 SSDT 表设计器确实显示正确的索引,但 Visual Studio 是产生“过程:[dbo].[TestProcedure] 对对象 [dbo].[TestTable].[TestIndex] 的引用未解决”。 “构建操作”设置设置为在所有三个文件上构建,并且所有对象都在同一架构中。我正在使用带有 Update 3 和 SSDT 14.0.6 的 Visual Studio Professional 2015 有什么方法可以解决以下代码产生的参考警告吗?

我尝试了这篇文章中提出的解决方案,但没有解决问题:SQL Server Data Tools (SSDT) warns of an unresolved table reference, but the table exists

TestTable.sql

CREATE TABLE [dbo].[TestTable]( [Id] INT NOT NULL PRIMARY KEY )

TestIndex.sql

CREATE CLUSTERED COLUMNSTORE INDEX [TestIndex] 
ON [dbo].[TestTable]

TestProcedure.sql

CREATE PROCEDURE dbo.TestProcedure
AS
DROP INDEX TestIndex ON dbo.TestTable

【问题讨论】:

  • 对我来说看起来像一个 SSDT 错误。警告出现在列存储索引而不是传统的 b 树索引上。考虑提交feedback

标签: sql-server sql-server-data-tools database-project


【解决方案1】:

您可以使用动态 SQL:

CREATE PROCEDURE dbo.TestProcedure
AS
BEGIN
  EXEC('DROP INDEX IF EXISTS TestIndex ON dbo.TestTable');
END;

或者仅添加IF EXISTS

CREATE PROCEDURE dbo.TestProcedure
AS
BEGIN
  DROP INDEX IF EXISTS TestIndex ON dbo.TestTable;
END;

【讨论】:

  • 虽然这在技术上会消除引用警告,但我想保留设计时和编译时引用检查,因此我认为在这种情况下动态 SQL 是朝着错误方向迈出的一步。将编辑问题以反映这一点。
  • @derekbaker783 你试过BEGIN END 的版本吗? CREATE PROCEDURE dbo.TestProcedure AS BEGIN DROP INDEX TestIndex ON dbo.TestTable; END;
  • 当我添加 IF EXISTS 时,引用警告被删除。添加 BEGIN 和 END 没有区别。如果您从答案中编辑动态 SQL,我会接受。
  • @derekbaker783 当然,完成。至于BEGIN-AFTER 是添加它们的好习惯。
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2019-04-05
  • 1970-01-01
  • 2021-08-17
  • 2016-12-14
相关资源
最近更新 更多