【发布时间】:2019-08-23 16:37:13
【问题描述】:
无法在以下架构绑定视图上创建索引。它是从另一个视图 (v_prod_manu_sub) 创建的。它显示以下错误消息:
无法在视图“dbo.V_PROD_MANU”上创建索引,因为它引用派生表“X”(由 FROM 子句中的 SELECT 语句定义)。考虑删除对派生表的引用 或不索引视图。
如何更改以下查询以创建索引?
ALTER VIEW [dbo].[V_PROD_MANU] WITH SCHEMABINDING AS
SELECT X.PRODUCT, CAST(RIGHT(TEXT_CODE,LEN(F_TEXT_CODE)-1) AS VARCHAR(30)) AS TEXT_CODE,
CAST(SUBSTRING(RIGHT(PHRASE,LEN(F_PHRASES)-1),9,LEN(F_PHRASE)-3) AS varchar(700)) AS PHRASE
FROM (
SELECT V1.PRODUCT,
(SELECT ',' + V2.TEXT_CODE FROM dbo.V_PROD_MANU_SUB V2 WHERE V1.PRODUCT = V2.PRODUCT ORDER BY V2.F_COUNTER FOR XML PATH('')) AS TEXT_CODE,
(SELECT ' |par|par ' + V3.F_PHRASE FROM dbo.V_PROD_MANU_SUB V3 WHERE V1.PRODUCT = V3.PRODUCT ORDER BY V3.F_COUNTER FOR XML PATH('')) AS PHRASE
FROM dbo.V_PROD_MANU_SUB V1 GROUP BY V1.PRODUCT)X
输出:
Product TEXT_CODE PHRASE
00-021 MANU0043,MANU0050 Inc |par Pharmaceuticals Group |par 235 East 5nd Street |par usa |par 1-800-123-000
【问题讨论】:
-
您想在索引视图中维护字符串聚合?为什么?
-
用于删除字符串起始位置的逗号。
-
视图索引有很多限制,包括没有子查询。仔细阅读documentation。
标签: sql-server-2012 subquery indexed-view