Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 WITH и SET  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Можно ли результат CTE запроса присвоить в XML? Если можно то как?

Например это ругается
DECLARE
	@A XML;

  SET @A = (WITH MergeHistory ([TimeStamp]) AS
    (SELECT
       MAX(mh.[timestamp])
     FROM
       MSmerge_history mh
     GROUP BY
       mh.agent_id)
  SELECT
    mh.[TimeStamp]
  FROM
    MergeHistory mh) FOR XML AUTO, TYPE
30 авг 13, 10:52    [14774714]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
Гость333
Member

Откуда:
Сообщений: 3683
X-Cite,

Используйте присваивание "SELECT @A = "
30 авг 13, 10:53    [14774732]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31970
X-Cite
Можно ли результат CTE запроса присвоить в XML? Если можно то как?
Естественно можно.
Результат CTE запроса бывает в конце, согласно синтаксису, там и присваивайте.
30 авг 13, 10:56    [14774758]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Гость333
X-Cite,

Используйте присваивание "SELECT @A = "

Пробовал
DECLARE
	@A XML;

  (WITH MergeHistory ([TimeStamp]) AS
    (SELECT
       MAX(mh.[timestamp])
     FROM
       MSmerge_history mh
     GROUP BY
       mh.agent_id)
  SELECT
    @A = mh.[TimeStamp]
  FROM
    MergeHistory mh) FOR XML AUTO, TYPE

Сообщение 156, уровень 15, состояние 1, строка 4
Неправильный синтаксис около ключевого слова "WITH".
Сообщение 102, уровень 15, состояние 1, строка 14
Неправильный синтаксис около конструкции ")".
30 авг 13, 10:56    [14774761]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
А зачем здесь вообще CTE?!
30 авг 13, 10:57    [14774764]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
alexeyvg
X-Cite
Можно ли результат CTE запроса присвоить в XML? Если можно то как?
Естественно можно.
Результат CTE запроса бывает в конце, согласно синтаксису, там и присваивайте.

И так пробовал
DECLARE
	@A XML;

  (WITH MergeHistory ([TimeStamp]) AS
    (SELECT
       MAX(mh.[timestamp])
     FROM
       MSmerge_history mh
     GROUP BY
       mh.agent_id)
  SET @A = (SELECT
    mh.[TimeStamp]
  FROM
    MergeHistory mh) FOR XML AUTO, TYPE)

Сообщение 156, уровень 15, состояние 1, строка 4
Неправильный синтаксис около ключевого слова "WITH".
Сообщение 156, уровень 15, состояние 1, строка 11
Неправильный синтаксис около ключевого слова "SET".
Сообщение 156, уровень 15, состояние 1, строка 14
Неправильный синтаксис около ключевого слова "FOR".
30 авг 13, 10:57    [14774773]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
pkarklin
А зачем здесь вообще CTE?!

Это пример. Меня интересует факт.
30 авг 13, 10:58    [14774779]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
В сообщении 14774761 допустил ошибку со (
DECLARE
	@A XML;

  WITH MergeHistory ([TimeStamp]) AS
    (SELECT
       MAX(mh.[timestamp])
     FROM
       MSmerge_history mh
     GROUP BY
       mh.agent_id)
  SELECT
    @A = mh.[TimeStamp]
  FROM
    MergeHistory mh FOR XML AUTO, TYPE

Сообщение 206, уровень 16, состояние 2, строка 4
Конфликт типов операндов: timestamp несовместим с xml
Сообщение 6809, уровень 16, состояние 1, строка 4
Невозможно использование безымянных таблиц в качестве идентификаторов XML, так же, как и безымянные столбцы нельзя использовать для имен атрибутов. Присвойте имена безымянным столбцам или таблицам, используя AS в инструкции SELECT.
30 авг 13, 11:00    [14774801]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Приведу пример, воспроизводимый у любого желающего.
DECLARE @A XML;

WITH cte AS (SELECT * FROM sys.objects)
SELECT @A = (SELECT * FROM cte FOR XML AUTO, TYPE);

SELECT @A;
30 авг 13, 11:04    [14774825]     Ответить | Цитировать Сообщить модератору
 Re: WITH и SET  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Гость333
Приведу пример, воспроизводимый у любого желающего.
DECLARE @A XML;

WITH cte AS (SELECT * FROM sys.objects)
SELECT @A = (SELECT * FROM cte FOR XML AUTO, TYPE);

SELECT @A;

Вот, спасибо.
Ваш ответ
автор
Используйте присваивание "SELECT @A = "
ввел меня в заблуждение т.е. я предположил что это надо писать в секции
SELECT @A = mh.[TimeStamp] FROM MergeHistory mh
30 авг 13, 11:08    [14774871]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить