当前位置: 代码迷 >> Sql Server >> 求指导~解决方案
  详细解决方案

求指导~解决方案

热度:13   发布时间:2016-04-24 10:36:12.0
求指导~

--有资料表t_zl
zldm,zlmc
01,MC1
02,MC2
.....
--数据表t_sj
zldm,zlmc,sj
01,MC1,10
03,MC3,20

求个存储过程例子,实现:
当执行存储过程时:EXEC SP_test_01 @ZLDM = N'全部'
存储过程实现
创建临时表,
create table #TEMPzl  (zldm varchar(20))
将t_zl所有zldm插入临时表里
      insert #TEMPzl  (zldm)
            select zldm from t_zl

再执行数据查询

select * from t_sj where zldm in (select zldm from #TEMPzl)
完成!

当执行存储过程时:EXEC SP_test_01 @ZLDM = N'01;03'
存储过程实现
创建临时表,
create table #TEMPzl  (zldm varchar(20))
将01;03插入临时表#TEMPzl  ,且数据如下:
zldm
01
03

在执行数据查询

select * from t_sj where zldm in (select zldm from #TEMPzl)
完成!







------解决方案--------------------

create table t_zl
(zldm varchar(10),zlmc varchar(10))

insert into t_zl
 select '01','MC1' union all
 select '02','MC2'

create table t_sj
(zldm varchar(10),zlmc varchar(10),sj int)

insert into t_sj
 select '01','MC1',10 union all
 select '03','MC3',20


-- 建存储过程
create proc SP_test_01
(@ZLDM nvarchar(50))
as
begin
create table #TEMPzl(zldm varchar(20))

if @ZLDM=N'全部'
  insert #TEMPzl(zldm)
   select zldm from t_zl
else
  insert #TEMPzl(zldm)
   select substring(a.s,b.number,charindex(';',a.s+';',b.number)-b.number)
   from (select @ZLDM 's') a,master..spt_values b
   where b.[type]='P' and b.number between 1 and len(a.s)
   and substring(';'+a.s,b.number,1)=';'

select * 
 from t_sj 
 where zldm in(select zldm from #TEMPzl)
end


-- 测试1
exec SP_test_01 @ZLDM=N'全部'
/*
zldm       zlmc       sj
---------- ---------- -----------
01         MC1        10

(1 row(s) affected)
*/


-- 测试2
exec SP_test_01 @ZLDM=N'01;03'
/*
zldm       zlmc       sj
---------- ---------- -----------
01         MC1        10
03         MC3        20

(2 row(s) affected)
*/

------解决方案--------------------
是否全部,用if/else判断一下就可以了。拆分函数:
/*
功能说明:传入字符串跟分割符('''HE00000003'',''HE00000004'',''HE00000005'''),返回一个Table
*/
Create 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


select * from [dbo].[fnSys_SplitString]('''HE00000003'',''HE00000004'',''HE00000005''')

------解决方案--------------------
引用:
Quote: 引用:


create table t_zl
(zldm varchar(10),zlmc varchar(10))

insert into t_zl
 select '01','MC1' union all
 select '02','MC2'

create table t_sj
(zldm varchar(10),zlmc varchar(10),sj int)

insert into t_sj
 select '01','MC1',10 union all
 select '03','MC3',20


-- 建存储过程
create proc SP_test_01
(@ZLDM nvarchar(50))
as
begin
create table #TEMPzl(zldm varchar(20))

if @ZLDM=N'全部'
  insert #TEMPzl(zldm)
   select zldm from t_zl
else
  insert #TEMPzl(zldm)
   select substring(a.s,b.number,charindex(';',a.s+';',b.number)-b.number)
   from (select @ZLDM 's') a,master..spt_values b
   where b.[type]='P' and b.number between 1 and len(a.s)
   and substring(';'+a.s,b.number,1)=';'
  相关解决方案