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

Откуда:
Сообщений: 2662
Хотелось бы запихнуть это


;WITH sub_tree(id,id_parant,name) AS
(
  SELECT id,id_parant,name
    FROM dbo.tree_doc
    WHERE id=172
  UNION ALL
  SELECT dbo.tree_doc.id,dbo.tree_doc.id_parant,dbo.tree_doc.name
    FROM dbo.tree_doc
      INNER JOIN sub_tree ON dbo.tree_doc.id_parant = sub_tree.id
)

select * from sub_tree
order by id


в табличную функцию


ALTER FUNCTION building_tree_d
(	
@id int
)

RETURNS TABLE 

AS

RETURN 

(
;WITH sub_tree(id,id_parant,name) AS
(
  SELECT id,id_parant,name
    FROM dbo.tree_doc
    WHERE id=@id
  UNION ALL
  SELECT dbo.tree_doc.id,dbo.tree_doc.id_parant,dbo.tree_doc.name
    FROM dbo.tree_doc
      INNER JOIN sub_tree ON dbo.tree_doc.id_parant = sub_tree.id
)

select * from sub_tree

)


Пишет следующее:

Сообщение 102, уровень 15, состояние 1, процедура building_tree_d, строка 13
Неправильный синтаксис около конструкции ";".
Сообщение 102, уровень 15, состояние 1, процедура building_tree_d, строка 26
Неправильный синтаксис около конструкции ")".


Как решить?


Заранее благодарен.
8 фев 13, 08:45    [13894955]     Ответить | Цитировать Сообщить модератору
 Re: Блок ;WITH  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
vah
Как решить?
ALTER FUNCTION building_tree_d
(	
	@id int
)
RETURNS TABLE 
AS
RETURN 
WITH sub_tree(id,id_parant,name) AS
(
  SELECT id,id_parant,name
    FROM dbo.tree_doc
    WHERE id=@id
  UNION ALL
  SELECT dbo.tree_doc.id,dbo.tree_doc.id_parant,dbo.tree_doc.name
    FROM dbo.tree_doc
      INNER JOIN sub_tree ON dbo.tree_doc.id_parant = sub_tree.id
)
select * from sub_tree
8 фев 13, 08:56    [13894979]     Ответить | Цитировать Сообщить модератору
 Re: Блок ;WITH  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Это можно и во вьюху пихать, но тоже без точки с запятой ;)
8 фев 13, 09:22    [13895078]     Ответить | Цитировать Сообщить модератору
 Re: Блок ;WITH  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Вообще пора бы привыкать писать точку с запятой после каждого оператора T-SQL, а не до некоторых избранных.
Ибо:
http://msdn.microsoft.com/en-us/library/ms177563.aspx
;
Transact-SQL statement terminator.Although the semicolon is not required for most statements in this version of SQL Server, it will be required in a future version.

Тогда и подобных вопросов не будет возникать в принципе.
8 фев 13, 10:27    [13895545]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить