写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量值函数可以返回基类型。举个例子,当用户删除一个节点的时候,是需要将当前节点下的所有子节点都删掉,如果程序只传一个当前节点,那就需要写一个函数来得到当前节点下的所有子节点,这些子节点的信息就可以放到一个表中返回。
- ALTER FUNCTION testGetSubNodes
- (
- @nodeId int
- )
- RETURNS @t TABLE
- (
- id bigint identity(1,1) not null,
- nodeIds int,
- nodeName varchar(500)
- )
- AS
- BEGIN
- insert into @t values(@nodeId,'header');
- while exists(select nodeid from dbo.Tree where parentid in (select nodeIds from @t) and nodeid not in(select nodeIds from @t))
- begin
- insert into @t select nodeid, nodename from dbo.Tree where parentid in (select nodeIds from @t)
- end
- RETURN
- END
- ALTER FUNCTION [dbo].[testGetSubNodes_]
- (
- @nodeId int
- )
- RETURNS int
- AS
- BEGIN
- declare @nodeCount int
- select @nodeCount=5 from MenuTree
- return @nodeCount
- END