Я использую Microsoft SQL Server Management Studio 2008 и столкнулся с проблемой создания представления. У меня такой код:
;WITH
cteSample
AS (
SELECT
vw_JobCosting_WIPMasterSub.SJob
, vw_JobCosting_WIPMasterSub.MJob
, vw_JobCosting_WIPMasterSub.MJob DisplayMJob
, vw_JobCosting_WIPMasterSub.GroupF
, 0 AS LVL
FROM vw_JobCosting_WIPMasterSub
WHERE vw_JobCosting_WIPMasterSub.GroupF = 'True'
UNION ALL
SELECT
vw_JobCosting_WIPMasterSub.SJob
, vw_JobCosting_WIPMasterSub.MJob
, CASE S.LVL
WHEN 0 THEN S.SJob
ELSE S.DisplayMJob
END AS DisplayMJob
, vw_JobCosting_WIPMasterSub.GroupF
, S.LVL + 1
FROM cteSample S
INNER JOIN vw_JobCosting_WIPMasterSub
ON S.SJob = vw_JobCosting_WIPMasterSub.MJob
WHERE vw_JobCosting_WIPMasterSub.GroupF = 'False'
)
SELECT
cteSample.SJob
, cteSample.DisplayMJob MJob
, cteSample.GroupF
FROM cteSample
ORDER BY
cteSample.LVL
, cteSample.MJob
, cteSample.SJob
Этот код отлично работает как запрос. Когда я выполняю как View, я получаю сообщение:
«Невозможно проанализировать текст запроса»
Когда я в порядке, код выполняется нормально. Когда я пытаюсь сохранить, я получаю следующую ошибку, и она не сохраняется:
"Неправильный синтаксис рядом с ';'"
Любая помощь будет принята с благодарностью.
1 ответ
Вы должны иметь возможность создать свое представление с WITH
в определении представления. Просто удалите разделитель ;
(он вам все равно не нужен, поскольку WITH
- ваш первый и единственный оператор) и ORDER BY
(вы должны заказывать при использовании представления):
CREATE VIEW yourView AS
WITH
cteSample
AS (
SELECT
vw_JobCosting_WIPMasterSub.SJob
, vw_JobCosting_WIPMasterSub.MJob
, vw_JobCosting_WIPMasterSub.MJob DisplayMJob
, vw_JobCosting_WIPMasterSub.GroupF
, 0 AS LVL
FROM vw_JobCosting_WIPMasterSub
WHERE vw_JobCosting_WIPMasterSub.GroupF = 'True'
UNION ALL
SELECT
vw_JobCosting_WIPMasterSub.SJob
, vw_JobCosting_WIPMasterSub.MJob
, CASE S.LVL
WHEN 0 THEN S.SJob
ELSE S.DisplayMJob
END AS DisplayMJob
, vw_JobCosting_WIPMasterSub.GroupF
, S.LVL + 1
FROM cteSample S
INNER JOIN vw_JobCosting_WIPMasterSub
ON S.SJob = vw_JobCosting_WIPMasterSub.MJob
WHERE vw_JobCosting_WIPMasterSub.GroupF = 'False'
)
SELECT
cteSample.SJob
, cteSample.DisplayMJob MJob
, cteSample.GroupF
FROM cteSample
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
create view
, но похоже, что вы сбиты с толку использованием терминатора оператора;
. Он должен стоять в конце, а не перед операторомwith
.with
, если это частьcreate view
. Вместо того, чтобы помещать терминатор оператора передWITH
, было бы намного лучше всегда помещать его в конец всех операторов (и этот вопрос показывает насколько запутанной может быть эта привычка - похоже, что user2849560 предполагает, что ключевое слово на самом деле "называется";WITH
, а неWITH
)