sqlserver 自定义函数return 问题

xgj1989 2009-11-05 05:26:30
create function subDepartment(@id varchar(36),@flag int)
returns @re table(subid varchar(36))
as
begin
insert @re select deli_id from departmentlink where deli_type=32
and deli_id =@id
if @flag=0
return
while @@rowcount>0
begin
insert @re
select a.deli_id from departmentlink a ,@re b

where a.deli_type=32 and a.deli_depa_id =b.subid
and a.deli_id not in (select subid from @re)
end
return
end


函数的作用是创建找出一个单位的所有下级单位或者就找出本单位。
第一个参数表示,上级ID,根据他找出他下面的所有下级ID,
第二个参数表示,是一个标记,如果是0就表示只返回本身,如果是非0 就执行找下级的代码。。

但是不管我是
select * from subDepartment('56B4217998F243BA8EF2ABC456C8D3A1',0)
select * from subDepartment('56B4217998F243BA8EF2ABC456C8D3A1',999)

返回的结果都是一条数据。。也就表示不管flag变量是,0 还是999都@flag=0都是真。。。。高手帮忙啊

...全文
205 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xgj1989 2009-11-05
  • 打赏
  • 举报
回复
xgj1989 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 guguda2008 的回复:]
你的WHERE的终止条件呢?每次循环都没变化吧
[/Quote]
if @flag=0
return

这里就应该已经返回了啊。。。
bancxc 2009-11-05
  • 打赏
  • 举报
回复
deli_depa_id 是父节点id吧 仔细看了一遍觉得没问题
guguda2008 2009-11-05
  • 打赏
  • 举报
回复
我以前写的一个小例子,发上来供你参考
if not object_id('tb') is null drop table tb
IF OBJECT_ID('FUN_MU') IS NOT NULL DROP FUNCTION FUN_MU
Go
CREATE FUNCTION FUN_MU(@ID INT,@FID INT)
RETURNS BIT
AS
BEGIN
DECLARE @TEMPID INT
SELECT @TEMPID=PARENTID FROM TB WHERE ID=@ID
WHILE @TEMPID<>@FID AND @TEMPID IS NOT NULL
BEGIN
IF EXISTS
(SELECT PARENTID FROM TB WHERE ID=@TEMPID)
SELECT @TEMPID=PARENTID FROM TB WHERE ID=@TEMPID
ELSE
SELECT @TEMPID=NULL
END
IF @TEMPID=@FID
--AND NOT EXISTS(SELECT 1 FROM TB WHERE PARENTID=@ID)
RETURN 1
RETURN 0
END
GO
Create table tb([id] int,[parentid] int,[name] varchar(10))
Insert tb
SELECT 1, 0 ,'体育用品' UNION ALL
SELECT 2, 0 ,'户外运动' UNION ALL
SELECT 3, 1 ,'篮球' UNION ALL
SELECT 4, 1 ,'足球' UNION ALL
SELECT 5, 2 ,'帐篷' UNION ALL
SELECT 6, 2 ,'登山鞋' UNION ALL
SELECT 7, 0 ,'男士用品' UNION ALL
SELECT 8, 7 ,'刮胡刀' UNION ALL
SELECT 9, 3 ,'大号篮球'
Go
DECLARE @FATHER INT
SET @FATHER=1
SELECT * FROM TB WHERE DBO.FUN_MU(ID,@FATHER)=1

/*
3 1 篮球
4 1 足球
9 3 大号篮球
*/
guguda2008 2009-11-05
  • 打赏
  • 举报
回复
你的WHERE的终止条件呢?每次循环都没变化吧
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

34,875

社区成员

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

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