求助,关于SQL中根据字符匹配查询的问题
问题简述如下:报告表中有个分类编码字段HS,其中有几种分类用“、”隔开 如 85、89、90
公司表中也有个分类编码字段HS,其中有几种分类用“、”隔开 如 85、52、60
现在需要根据报告中分类码查询与报告有相同分类码的公司(一个相同即可,如:报告HS为 85、89、90 公司HS为 85、52、60 则该公司应该被查询出来)
我原来的思路是先把公司HS码截取出来循环传入下面所写的存储过程中查询,可是严重超时,请各位大哥帮忙解决下,谢谢了!
--存储过程
CREATE PROCEDURE GetSendWarnCorporation
@TbtHS varchar(10) --包包中截取后传入的HS
AS
DECLARE MyCURSOR CURSOR FOR SELECT [ID],HS FROM Corporation
--打开游标
open MyCURSOR
declare @HS varchar(100) --公司的HS分类
declare @HSsub varchar(10) --截取的HS
declare @ID int --公司编号
declare @StrSql varchar(1000) --得到的查询集合
declare @flg bit --标记
declare @end int --HS中顿号截取位置
set @StrSql='('
--循环移动
fetch next from MyCURSOR into @ID,@HS
while(@@fetch_status=0)
set @flg=0
begin
while(@flg=0 and len(@HS)>0)
begin
set @end = PATINDEX('%、%', @HS) --得到第一次出现'、'的位置
set @HSsub = SUBSTRING(@HS, 0, @end) --截取
set @HS = SUBSTRING(@HS, @end,len(@HS)) --截取
if(@TbtHS=@HSsub)
begin
set @StrSql = @StrSql + ','''+Convert(varchar,@ID)+''''
set @flg=1
end
if(@TbtHS=@HS)
begin
set @StrSql = @StrSql + ','''+Convert(varchar,@ID)+''''
set @flg=1
end
end
fetch next from MyCURSOR into @HS
end
close MyCURSOR
deallocate MyCURSOR
set @StrSql = @StrSql+')'
exec ’select * from Corporation where [ID] in '+ @StrSql
GO