我试图为cdc函数的结果创建索引视图。原始查询很大且很复杂。下面是产生同样的错误查询的简化版本:我使用dbo
和cdc
是否可以为使用CDC功能的查询创建“索引视图”?
Cannot schema bind view 'dbo.view_Test'. 'cdc.fn_cdc_get_all_changes_dbo_EXT_GeolObject_KategZalezh' is not schema bound.
,我读了
if you want to create an index on a view or you want to preserve the base table schema once a view has been defined, in both these cases you have to use the "WITH SCHEMABINDING" clause to bind the view to the schema of the base tables
在原来的查询:
SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,
QUOTED_IDENTIFIER, ANSI_NULLS ON;
GO
--Create view with schemabinding.
IF OBJECT_ID ('dbo.view_Test', 'view') IS NOT NULL
DROP VIEW dbo.view_Test;
GO
CREATE VIEW dbo.view_Test
WITH SCHEMABINDING
AS
SELECT
kz.__$start_lsn,
kz.__$seqval,
kz.__$operation AS operation,
kz.__$update_mask,
kz.GUID,
kz.typezalezh,
kz.category,
kz.zone,
kz.area,
kz.Volume
FROM cdc.fn_cdc_get_all_changes_dbo_EXT_GeolObject_KategZalezh(sys.fn_cdc_get_min_lsn('dbo_EXT_GeolObject_KategZalezh'), sys.fn_cdc_get_max_lsn(), 'all') AS kz
GO
该查询返回如下因素误差模式在这里我只使用cdc
模式。但我想在dbo
dchema创建视图。 此外,我正在使用CDC功能,而不是像微软推荐的那样直接使用cdc表。
我读到一些事情要考虑创建索引视图时:
- 不能创建与外视图索引联接在其使用,即使您使用架构绑定
- 你可以在视图中的select语句不创建与外视图索引在它加入使用,即使您使用架构绑定
- 不能使用“*”当它被绑定到架构。
- 您将无法在视图上创建聚集索引,如果视图引用任何非确定性函数。
- 使用模式绑定时不能使用聚合函数。
- 您无法迁移模式绑定视图的基表。
据我所知,我的查询是适合这个规则。但我不确定CDC功能是确定性的还是非确定性的。
是一种可能创建查询“索引视图”,其中使用CDC功能?
谢谢。我想过这个问题。一个问题。我可以从简单视图创建索引视图吗? – Seva
是的,您可以在视图符合某些限制时创建索引。限制和一个很好的例子可以在这里找到[链接](https://docs.microsoft.com/en-us/sql/relational-databases/views/create-indexed-views)。 –