首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

在自个儿的本地计算机数据库上做一个函数或存储过程

2013-12-21 
在自己的本地计算机数据库上做一个函数或存储过程在自己的本地计算机数据库上做一个函数或存储过程功能:根

在自己的本地计算机数据库上做一个函数或存储过程
在自己的本地计算机数据库上做一个函数或存储过程
功能:根据输入的字符串(以','分隔)  返回一个@infocode varchar(30) 信息码
引用的数据表:(这个表要自己建)
表名 Test数据    

ID   strcode
1    1,2,5,8,9,14, 
2    1,3,5,6,7,8,9,11 
3    3,4,5,6,7 
4    1,5,7,8,9 
5    3,5,6,9,11,12 
6    2,3,4,5,7 
7    3,4,5,6,7,8 
8    1,2,3,4,5,6,7,8,9,10 
9    1,7,8,9 

表里的数据就是类似这样的 
现在问题就是 给出一个字符串 1,11,12 (长度不一定,也许是5个也许是6个) 
找出含有这个字符串数字的所有数据 
比如1,11,12 查询的结果应该是 ID: 1 2 4 5 8 9 
调用改功能 传参(1,11,12) 返回 对应编码 :124589 


[解决办法]

/*
DROP FUNCTION dbo.Split
SELECT dbo.Split
*/
CREATE FUNCTION dbo.Split
(
@SplitString varchar(8000),-- nvarchar(4000)
@Separator varchar(2) = ','
)
RETURNS @SplitStringsTable TABLE
(
[id] int identity(1,1),
[value] varchar(8000)-- nvarchar(4000)
)
AS
BEGIN
    DECLARE @CurrentIndex int;
    DECLARE @NextIndex int;
    DECLARE @ReturnText varchar(8000);-- nvarchar(4000)
    SELECT @CurrentIndex=1;
    WHILE(@CurrentIndex<=len(@SplitString))
    BEGIN
        SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
        IF(@NextIndex=0 OR @NextIndex IS NULL)
            SELECT @NextIndex=len(@SplitString)+1;
       
        SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);

        INSERT INTO @SplitStringsTable([value])
        VALUES(@ReturnText);
       
        SELECT @CurrentIndex=@NextIndex+1;
    END
    RETURN;
END

create table #tb(id int ,strcode varchar(100))
insert into #tb
select 1 as ID,'1,2,5,8,9,14, ' as strcode
union all select 2,'1,3,5,6,7,8,9,11 '
union all select 3,'3,4,5,6,7 '
union all select 4,'1,5,7,8,9 '
union all select 5,'3,5,6,9,11,12 '
union all select 6,'2,3,4,5,7 '
union all select 7,'3,4,5,6,7,8 '
union all select 8,'1,2,3,4,5,6,7,8,9,10 '
union all select 9,'1,7,8,9 '

declare @s varchar(100)
set @s='1,11,12'
select a.*
into #temp
from #tb a
inner join (select * from dbo.Split(@s,','))b on CHARINDEX(','+b.value+',',','+strcode+',')>0

declare @v varchar(100)
set @v=''
select @v=@v+CAST(id as varchar) from #temp
select @v

drop table #tb,#temp

/*
124895
*/

热点排行