导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

小弟请教大家一个关于存储过程的问题

wangjianjun02 2007-12-17 03:44:36
我有一些数据是动态产生的,比如说用户输入了三个关键字"汽车,电脑,通讯",我现在的做法是在数据库中寻找类别分别"汽车,电脑,通讯"的数据,采用循环的方法,我这样一来就会产生三个表,最后将三个表合并在一起,返回给用户,我原来是在程序中循环的,现在我想在存储过程中循环,但是我不太会写,请大家帮助我
...全文
23 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-12-17
/*
功能:实现split功能的函数
*/

create function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as

begin
declare @i int

set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)

while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))

set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end

if @inputstr <> '\'
insert @temp values(@inputstr)

return
end
go

--调用

declare @s varchar(1000)

set @s='1,2,3,4,5,6,7,8,55'

select * from dbo.fn_split(@s,',')

drop function dbo.fn_split





回复
dawugui 2007-12-17
如果数量多,得先通过函数或存储过程分解字符串,然后使用charindex()
回复
dawugui 2007-12-17
如果只有三个,好办.

declare @s as varchar(100) '汽车,电脑,通讯'
declare @s1 as varchar(10)
declare @s2 as varchar(10)
declare @s3 as varchar(10)
set @s1 = left(@s , charindex(',' , @s) - 1)
set @s2 = substring(@s , charindex(',' , @s) + 1 , charindex(',' , @s , charindex(',' , @s) + 1) , charindex(',' , @s , charindex(',' , @s) + 1) - charindex(',' , @s) - 1)
set @s3 = reverse(left(reverse(@s) , charindex(',' , reverse(@s) - 1))

select * from tb where charindex(@s1 , col) > 0 or charindex(@s2 , col) > 0 or charindex(@s3 , col) > 0
回复
fa_ge 2007-12-17
全文檢索?
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告