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中
最终实现效果:

学习记录

浙公网安备 33010602011771号