Блок ;WITH

vah
Дата: 08.02.2013 08:45:43
Хотелось бы запихнуть это


;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
Неправильный синтаксис около конструкции ")".


Как решить?


Заранее благодарен.
alexeyvg
Дата: 08.02.2013 08:56:20
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
tpg
Дата: 08.02.2013 09:22:15
Это можно и во вьюху пихать, но тоже без точки с запятой ;)
Гость333
Дата: 08.02.2013 10:27:32
Вообще пора бы привыкать писать точку с запятой после каждого оператора 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.

Тогда и подобных вопросов не будет возникать в принципе.