Неправильный синтаксис около ключевого слова 'с' … предыдущим оператором должен быть завершен с точкой с запятой

Вы могли бы хотеть иметь некоторую функциональность и в браузере и в сервере для имения той же самой реализации.

примером был бы рендерер для синтаксиса Wiki, который Вы выполняете в браузере для WYSIWYG-редактора и на сервере для рендеринга получающейся страницы. Таким образом, Вы знаете, что оба представленные результаты будут точно тем же в обоих случаях.

, По-видимому Носорог может скомпилировать JavaScript в классы Java.

35
задан Duncan 17 September 2009 в 14:26
поделиться

3 ответа

Используйте запятую для разделения CTE

;WITH SomeClause1 AS
(
  SELECT ....
)
, SomeClause2 AS
(
  SELECT ....
)
65
ответ дан 27 November 2019 в 06:46
поделиться

Забудьте о добавлении ";" к предыдущему утверждению, как говорится в сообщении об ошибке. Просто возьмите за привычку всегда кодировать его так: "; WITH", и все будет хорошо ...

;WITH SomeClause1 AS
(
  SELECT ....
)

однако вы должны соединить несколько CTE с запятыми, но перед "; WITH" всегда стоит точка с запятой:

;WITH SomeClause1 AS
(
  SELECT ....
)
,SomeClause2 AS
(
  SELECT ....
)
15
ответ дан 27 November 2019 в 06:46
поделиться

У меня не работает.

В моем случае я использую значение CTE в предложении RETURN пользовательской функции, возвращающей табличное значение. Если я заключу предложение RETURN в BEGIN-END, я получаю то же сообщение об ошибке, но простое предложение RETURN () работает нормально. Я считаю, что в данном случае сообщение об ошибке неверно.

Это работает:

CREATE FUNCTION [dbo].[ft_SplitStringOnChar]
      (
      @s varchar(8000),
      @sep char(1)
      )

RETURNS TABLE
AS

RETURN (
    WITH Pieces(pn, start, stop) AS (
      SELECT 1, 1, CHARINDEX(@sep, @s)
      UNION ALL
      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
      FROM Pieces
      WHERE stop > 0
    )
    SELECT pn AS TokenNumber,
      SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS TokenString
    FROM Pieces
  )

GO  

This does not:

CREATE FUNCTION [dbo].[ft_SplitStringOnChar]
      (
      @s varchar(8000),
      @sep char(1)
      )

RETURNS TABLE
AS
BEGIN
;
RETURN (
    WITH Pieces(pn, start, stop) AS (
      SELECT 1, 1, CHARINDEX(@sep, @s)
      UNION ALL
      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
      FROM Pieces
      WHERE stop > 0
    )
    SELECT pn AS TokenNumber,
      SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS TokenString
    FROM Pieces
  )
END
GO  
1
ответ дан 27 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: