SQL Сервер - CTE и удаление в виде - PullRequest
0 голосов
/ 14 января 2020

Попытка создать VIEW, который начинается с добавления строк клиентов в CTE, удаляет некоторых клиентов, которые соответствуют определенным критериям из CTE, а затем выполняет окончательный SELECT. Получение следующей ошибки прямо перед оператором удаления:

Сообщение 156, Уровень 15, Состояние 1, Процедура vwUpForRN, Строка 23 [Стартовая строка начала 0]
Неверный синтаксис рядом с ключевым словом «Удалить»

SQL:

ALTER VIEW vwUpForRN
AS
    WITH UpForRN ([CustomerID]
          ,[ContractStartDate]
          ,[ContractEndDate]      
          ,[PlanName]
          ,[ProductID]
          ,[ContractTimeline]) AS 
    (
        SELECT 
            [CustomerID],
            [ContractStartDate],
            [ContractEndDate],
            [PlanName],
            [ProductID],
            [ContractTimeline]
        FROM 
            [Reporting].[Customer].[vwContracts]
        WHERE 
            ContractCategory = 'Regular'
            AND DATEDIFF(DAY, GETDATE(), ContractEndDate) <= 60
            AND ContractTimeline <> 'Past'
    )
    DELETE FROM UpForRN 
    WHERE ContractTimeline = 'Future'

1 Ответ

1 голос
/ 14 января 2020

Я не думаю, что вы хотите CTE. Таким образом, ваш код будет:

ALTER VIEW vwUpForRN AS
    SELECT [CustomerID], [ContractStartDate], [ContractEndDate], [PlanName], [ProductID], [ContractTimeline]
    FROM [Reporting].[Customer].[vwContracts]
    WHERE ContractCategory = 'Regular' AND
          DateDiff(day,getdate(), ContractEndDate) <= 60 AND
          ContractTimeline NOT IN ('Past', 'Future');

То есть вы не удаляете из представления. Вы просто не вставляете эти строки в начало.

...