Ошибка материализованного представления SQL Server (индексированное представление) - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь создать материализованное представление с помощью Microsoft SQL Server Management Studio 14.0.17285.0.Ниже приведен сценарий, с которым я закончил, чтобы добиться того же.

Мой план состоит в том, чтобы создать представление и создать индекс поверх него.

use data_warehouse;

--Set the options to support indexed views.  
    SET NUMERIC_ROUNDABORT OFF;  
    SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,  
        QUOTED_IDENTIFIER, ANSI_NULLS ON;
    GO

CREATE VIEW products_yearly_v2
WITH SCHEMABINDING 
AS
    SELECT  
        p.product_id AS product_id, 
        p.product_description AS product_name,
        d.order_year AS order_year,  
        SUM(s.order_total) AS sal_by_dept
    FROM   
        [data_warehouse].[dbo].orders_fact AS s
    INNER JOIN 
        [data_warehouse].[dbo].time_dimension AS d ON s.time_id = d.order_date
    INNER JOIN 
        [data_warehouse].[dbo].product_dimension AS p ON s.product_id = p.product_id
    GROUP BY 
        d.order_year, p.product_id, p.product_description;

CREATE UNIQUE CLUSTERED INDEX IDX_V1   
    ON products_yearly_v1 (order_year, product_id);

Я получаю эту ошибку:

Сообщение 156,Уровень 15, Состояние 1, Процедура products_yearly_v2, Строка 12 [Пакетная строка запуска 7]
Неверный синтаксис рядом с ключевым словом 'CREATE'

Обновление Добавлен COUNT_BIG (*) вдля создания индекса.

SELECT  COUNT_BIG(*) as count_big, p.product_id as product_id, d.order_year as order_year,  sum(s.order_total) AS sal_by_dept ....

Удалено описание продукта из GROUP BY

GROUP BY d.order_year,p.product_id;

Readded,

USE data_warehouse

1 Ответ

0 голосов
/ 29 декабря 2018

Вам необходимо использовать имена из двух частей:

SCHEMABINDING

Привязывает представление к схеме базовой таблицы или таблиц.Когда указано SCHEMABINDING, базовая таблица или таблицы не могут быть изменены таким образом, чтобы это влияло на определение представления.Само определение представления должно сначала быть изменено или удалено, чтобы удалить зависимости от таблицы, которая должна быть изменена. Когда вы используете SCHEMABINDING, select_statement должен включать имена из двух частей (schema.object) таблиц, представлений или пользовательских функций, на которые ссылаются.Все ссылочные объекты должны находиться в одной базе данных.

USE data_warehouse
GO

CREATE VIEW dbo.products_yearly_v2
WITH SCHEMABINDING 
AS 
SELECT  
    p.product_id AS product_id, 
    p.product_description AS product_name,
    d.order_year AS order_year,  
    SUM(s.order_total) AS sal_by_dept
FROM [dbo].orders_fact AS s
JOIN [dbo].time_dimension AS d ON s.time_id = d.order_date
JOIN [dbo].product_dimension AS p ON s.product_id = p.product_id
GROUP BY d.order_year, p.product_id, p.product_description;
GO

-- index on products_yearly_v2 not products_yearly_v1
CREATE UNIQUE CLUSTERED INDEX IDX_V2
   ON dbo.products_yearly_v2 (order_year, product_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...