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

该语句怎么优化

2014-01-15 
该语句如何优化?--创建表(机构表)CREATE TABLE [dbo].[Area]([AreaTId] [int] NOT NULL,[AreaName] [varch

该语句如何优化?
--创建表(机构表)
CREATE TABLE [dbo].[Area](
[AreaTId] [int] NOT NULL,
[AreaName] [varchar](64) NOT NULL,
[MemberId] [varchar](384) NOT NULL,
 CONSTRAINT [PK_Area] PRIMARY KEY CLUSTERED 
(
[AreaTId] ASC
)) ON [PRIMARY]

insert into Area values(1000,'101','001')
insert into Area values(1002,'102','001001')
insert into Area values(1003,'103','001001001')
insert into Area values(1004,'201','002')
insert into Area values(1005,'202','002001')
insert into Area values(1006,'203','002002')
-- 数据很多,举例只添加几条


--如果传过来的值是 a002,b001,有可能传值特别多
--我要获取所有符合条件AreaTId
/*  1002得到其 memberID:001001.所以1000不属于他的机构
1002102001001
1003103001001001
1004201002
1005202002001
1006203002002
*/

select * from area where (MemberId LIKE (select MemberID from area where AreaTId='1002') +'%')
union all
select * from area where (MemberId LIKE ( select MemberID from Area where areaTId='1004') +'%')

如果传过来的值太多,语句好长,我应该怎么优化呢?
[解决办法]

/*
功能说明:传入字符串跟分割符('''HE00000003'',''HE00000004'',''HE00000005'''),返回一个Table
*/
ALTER function [dbo].[fnSys_SplitString]
(
---字符串分割
@Str varchar(max), --传入的字符串
@SeprateStr varchar(10)--分隔符
)
Returns @temp table(Code varchar(100)) --返回一个Table
As 
Begin
Declare @i int
Set @Str=REPLACE(@str,'''','')
Set @Str =rtrim(ltrim(@Str ))
Set @i=charindex(@SeprateStr,@Str )
While @i>=1
Begin
Insert @temp values(left(@Str ,@i-1))
Set @Str =substring(@Str ,@i+1,len(@Str )-@i)
Set @i=charindex(@SeprateStr,@Str )
End
If @Str <>'' 
Insert @temp values(@Str )
Return 
End

热点排行