表1tArea,是个树状表
ID Name Upid
1 所有地区 0
2 国内 1
3 国外 1
4 广州 2
5 美国 3 0 所有地区
|
|----国内--广州
|
|----国外--美国 ParentID 是UPID
。
表2 Client
ID Code Name AreaID(FK)
1 H0001 CUST1 4
2 H0002 Cust2 5我想知道,怎么得出以上这两个客户所属地区广州和美国分别是属于"国内"和"国外"
也就是说,我在表2中有一些记录,每个记录通过AreaID和表1的ID关联,,,,我想写一段代码,可以知道每个表2的记录,他的所属地区的上级ID是否有"国内"和"国外"这一类别的.也就是是否该AREAID在表1,是不是
2 国内 1
3 国外 1
的子节点.......
ID Name Upid
1 所有地区 0
2 国内 1
3 国外 1
4 广州 2
5 美国 3 0 所有地区
|
|----国内--广州
|
|----国外--美国 ParentID 是UPID
。
表2 Client
ID Code Name AreaID(FK)
1 H0001 CUST1 4
2 H0002 Cust2 5我想知道,怎么得出以上这两个客户所属地区广州和美国分别是属于"国内"和"国外"
也就是说,我在表2中有一些记录,每个记录通过AreaID和表1的ID关联,,,,我想写一段代码,可以知道每个表2的记录,他的所属地区的上级ID是否有"国内"和"国外"这一类别的.也就是是否该AREAID在表1,是不是
2 国内 1
3 国外 1
的子节点.......
(Select C.ID,C.Code,C.Name,C.AreaID,L.Upid,L.Name AS AreaName
From Client C Left join ltArea L on C.AreaID=L.ID) AS B
Where B.Upid='2' or B.Upid='3'
要写个递归的存储过程或自定义函数。
这样子,返回值1为所有地区,2为国内,3为国外
CREATE FUNCTION dbo.isabroad (@aid int)
RETURNS int AS
BEGIN
declare @tmpid int
if @aid=1
return 1
if @aid=2
return 2
if @aid=3
return 3
select @tmpid=upid from ltArea where id=@aid
return dbo.isabroad(@tmpid)END
看不太明白,你的意思,那么这个函数要怎么使用。。
能不能给个列子呢。