ALTER TABLE SWITCH 因索引视图而失败

Ian*_*rie 3 sql-server

ALTER TABLE SWITCH我在暂存表和架构绑定到索引视图的目标表之间遇到问题。

当我发表SWITCH声明时,例如

ALTER TABLE dbo.MASTERPrices_Staging switch TO dbo.MASTERPrices; 
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:-

消息 11402,级别 16,状态 1,第 1 行 ALTER TABLE SWITCH 语句失败。目标表“MASTERPrices”由 1 个索引视图引用,但源表“MASTERPrices_Staging”仅由 0 个索引视图引用。目标表上的每个索引视图必须在源表上至少有一个匹配的索引视图。

我们仅使用 SQL Server 2008 标准版,因此分区不是解决方案。我每天需要SWITCH大约 1000 万行,但又不放弃索引视图解决方案?

如果我将视图更改为非架构绑定,则SWITCH可以工作,但是当我ALTER再次查看视图并将其设置回时SCHEMABOUND,所有索引(其中 12 个索引,包括聚集索引都消失了)

有人有什么想法吗?

Rem*_*anu 5

您需要临时表上的索引视图与生产表上的索引视图相匹配,并且临时视图上的索引与生产视图上的每个索引相匹配。

参见SqlFiddle

这个想法是引擎必须替换每个索引,包括在视图上声明的索引。如果它已构建索引(即,如果生产上有索引但暂存上没有索引),则切换将失败。此外,所有约束、过滤器等都必须匹配,以便引擎知道数据有效(暂存数据不会违反生产约束)。

不知道为什么你需要外部连接或类似的东西,这应该是直接的。