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中

最终实现效果:

学习记录

posted @ 2011-06-23 15:22  陈帆  Views(1906)  Comments(0Edit  收藏  举报