sql 自定义表值函数
数据库样式,如图:
要实现的功能是:
例如:传入一个河南省的编号(410000),则查出表中所有是河南省下属的记录,因为数据库编号中,涉及逗号,所以要对编号进行分割
实现代码如下:
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date, ,> -- Description: <Description, ,> -- ============================================= ALTER FUNCTION [dbo].[CuteAreaCode](@str varchar(200)) RETURNS @tb table(code varchar(8000)) --返回表 AS BEGIN DECLARE @strTest varchar(8000) --用于存放从数据库中查出来的区域编号 DECLARE @ceshi int --用于判断传入的编号是否和数据库中的编号相同 0不同 1 相同 set @ceshi =0 DECLARE @CutAreaCode varchar(100) --存放用逗号隔开的区域编号 DECLARE @strcut varchar(50) --将传入的编号截取前两位 set @strcut =substring(@str,1,2) DECLARE cur CURSOR for --定义游标 select AreaCode from Calamity open cur --打开游标 fetch next from cur into @strTest while(@@fetch_status=0) --判断游标状态 begin --set @strTest=(select AreaCode from Calamity) set @ceshi=0 --开始截取 while(charindex(',',@strTest)<>0) begin --print @strTest --if( @str like (substring(@strTest,1,charindex(',',@strTest)-1))) --if(charindex(@strcut,substring(@strTest,1,charindex(',',@strTest)-1))>0) set @CutAreaCode= substring(@strTest,1,charindex(',',@strTest)-1) if(@strcut =substring(@CutAreaCode,1,2)) set @ceshi=1 break set @strTest=stuff(@strTest,1,charindex(',',@strTest),'') end --结束截取 if(@ceshi=1) insert @tb(code) values (@strTest) fetch next from cur into @strTest end close cur deallocate cur -- Add the T-SQL statements to compute the return value here -- Return the result of the function RETURN END
文中,学习了,游标
需要注意的是:
fetch next from cur into @strTest 将查出来的结果保存到变量@strTest中
最终实现效果:
学习记录