Сообщение 102, уровень 15, состояние 1, строка 28 Неправильный синтаксис рядом с ‘)’. в моей общей таблице

#sql-server

#sql-сервер

Вопрос:

Я использую SQL server Management studio 2014. И я продолжаю получать эту ошибку при создании общей таблицы:

Сообщение 102, уровень 15, состояние 1, строка 28 Неправильный синтаксис рядом с ‘)’.

Что я пытаюсь сделать, так это выбрать имя и умножить значения атрибутов двух других столбцов, чтобы создать псевдоним из таблицы FIRE_FIGHTER и сделать его общей таблицей для повторного использования позже.

Мне сказали поставить точку с запятой прямо в начале ключевого слова «WITH», но это не помогает. Пожалуйста, я новичок в SQL server. Кто-нибудь может помочь? Пожалуйста. Спасибо в расширенном

 ;WITH PROMOTION_SCORE (F_Name,Promotion_Score)

AS

(

SELECT 
F_Name, (Years_In_Department*Number_Fire_Fought) AS Promotion_Score

 FROM FIRE_FIREGHTER

)
  

Ответ №1:

Ваш общий синтаксис запроса табличного выражения неверен. Вам не хватает инструкции select . Попробуйте следующее

 ;WITH PROMOTION_SCORE (F_Name,Promotion_Score)

AS

(

SELECT 
F_Name, (Years_In_Department*Number_Fire_Fought) AS Promotion_Score

 FROM FIRE_FIREGHTER

)
Select * from PROMOTION_SCORE;
  

Комментарии:

1. Как я могу повторно использовать PROMOTION_SCORE для вычисления максимального Promotion_Score. Я попробовал следующий код сразу после вышеупомянутого, но он не сработал:

2. ВЫБЕРИТЕ F_Name , MAX (Promotion_Score) КАК Highest_Promotion_Score ИЗ PROMOTION_SCORE В нем говорится: сообщение 208, уровень 16, состояние 1, строка 36 Недопустимое имя объекта ‘PROMOTION_SCORE’.

3. Я хотел бы знать, как повторно использовать общую таблицу PROMOTION_SCORE более одного раза для дальнейших вычислений в других запросах

4. @Freddy, вы можете заменить запрос Select * from PROMOTION_SCORE на запрос, который вы хотели использовать. Promotion_Score будет выступать в качестве таблицы в этом контексте.

5. Спасибо, Киран. Я понял. Я добавил следующий код, и он сработал.

Ответ №2:

Кстати, точка с запятой является терминатором оператора. Дело не столько в том, что это должно быть ПЕРЕД CTE, сколько ПОСЛЕ предыдущего оператора. Бывают случаи, когда вам не нужна точка с запятой перед CTE. Например: создать представление products.specials как с my_cte как ( … ) ВЫБЕРИТЕ …

В большинстве случаев точка с запятой в tSQL не требуется, но это происходит, когда за оператором следует CTE.

Комментарии:

1. Хороший пример, но не ответ на этот вопрос! Могу ли я предложить вам опубликовать его здесь ?