大家帮忙看这个SQL函数!!

jy02870694 2009-08-05 06:04:40
CREATE FUNCTION CS_GetTreeTable
(
@ID INT= NULL, @TabName
)
RETURNS @Tab TABLE(Class_ID INT, Parent_Id INT, Class_Name VARCHAR(10), Lev INT)--返回结果的表结构
AS
BEGIN
DECLARE @lev INT
SET @lev=0

WHILE @lev=0 or @@ROWCOUNT>0
BEGIN
SET @Lev=@Lev+1
INSERT @Tab(Class_ID, Parent_Id, Class_Name, Lev)
SELECT Class_ID, Parent_Id, Class_Name, @Lev FROM @TabName --这里的表改成传入参数的就会报错
WHERE (@Lev=1 and ((Parent_Id=@ID) or (@ID = 0 and Parent_Id = 0))) or (Parent_Id in (SELECT Class_ID FROM @Tab WHERE Lev=@Lev-1))
ORDER BY Class_ID
End
RETURN
END
---------------------------------------------------------------
服务器: 消息 137,级别 15,状态 2,过程 CS_GetTreeTable,行 16
必须声明变量 '@TabName'。
服务器: 消息 170,级别 15,状态 1,过程 CS_GetTreeTable,行 16
第 16 行: ')' 附近有语法错误。
...全文
73 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jy02870694 2009-08-05
  • 打赏
  • 举报
回复
谢谢大家!!
soft_wsx 2009-08-05
  • 打赏
  • 举报
回复
这么快,还没来得急回复呢?
jy02870694 2009-08-05
  • 打赏
  • 举报
回复
其实我要解决的就是一个树查询
@Tab(Class_ID, Class_Name, Parent_Id, Order_Num)
类似
SELECT * FROM Product WHERE [Class_ID] in (SELECT Class_ID FROM CS_GetTreeTable({0}))
SQL77 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sdhdy 的回复:]
动态SQL 的话,用表变量也不行。
[/Quote]
用表变量能行吧SDHDY大哥,
EXEC('SELECT * FROM '+@TABLE+'')
pt1314917 2009-08-05
  • 打赏
  • 举报
回复
CREATE proc CS_GetTreeTable 
@ID INT= NULL,
@TabName varchar(10)
AS
BEGIN
create TABLE #Tab (Class_ID INT, Parent_Id INT, Class_Name VARCHAR(10), Lev INT)--返回结果的表结构
DECLARE @lev INT,@sql varchar(1000)
SET @lev=0
WHILE (@lev=0 or @@ROWCOUNT>0 )
BEGIN
SET @Lev=@Lev+1
set @sql='INSERT #Tab(Class_ID, Parent_Id, Class_Name, Lev) SELECT Class_ID, Parent_Id, Class_Name, '+ltrim(@Lev)+' FROM '+@tabname+'
WHERE ('+ltrim(@Lev)+'=1 and ((Parent_Id='+ltrim(@ID)+') or ('+ltrim(@ID)+' = 0 and Parent_Id = 0))) or
(Parent_Id in (SELECT Class_ID FROM '+@tabname+' WHERE Lev='+ltrim(@Lev)+'-1))
ORDER BY Class_ID'
exec(@sql)
End
select * from #Tab
END


SQL77 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jy02870694 的回复:]
to:happyflystone您好
麻烦请问下是换成存储过程吗?
[/Quote]
换成存储过程,函数不支持动态!!!
sdhdy 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jy02870694 的回复:]
to:happyflystone您好
麻烦请问下是换成存储过程吗?
[/Quote]
得用存储过程。
sdhdy 2009-08-05
  • 打赏
  • 举报
回复
动态SQL 的话,用表变量也不行。
bluefangxiao 2009-08-05
  • 打赏
  • 举报
回复
up
jy02870694 2009-08-05
  • 打赏
  • 举报
回复
to:happyflystone您好
麻烦请问下是换成存储过程吗?
-狙击手- 2009-08-05
  • 打赏
  • 举报
回复
换成过程吧

你的这个要动态sql ,函数体不支持动态SQL

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧