存储过程参数 用到in

在使用存储过程中,有用到in

1:首先增加一个 split 函数

ALTER    FUNCTION [dbo].[Split]   
--用来在存储过程中使用in的函数,这个函数的作用呢,就是把你输入的字符按一定的分隔符分开,并放在一个表里的一列里,然后返回。
(   
@c VARCHAR(300) ,   
@split VARCHAR(50)   
)   
RETURNS @t TABLE ( col VARCHAR(50) )   
AS  
BEGIN  
    WHILE ( CHARINDEX(@split, @c) <> 0 )   
        BEGIN  
            INSERT  @t( col )   
            VALUES  ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) )   
            SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '')   
        END  
    INSERT  @t( col ) VALUES  ( @c )   
    RETURN  
END

2:在存储过程中,这样写

image

create   proc 查询公司员工下现有公司(@guwen varchar(200))
as
--用途:查询员工下所有的公司(目前还在我公司旗下的)
--参数为 'Queenie,Thomas,Cat,Sweet,Rain'  
--exec 查询公司员工下现有公司 'Queenie,Thomas,Cat,Sweet,Rain'
begin 

SELECT a.id, a.COCN AS 公司中文名, a.COEN AS 公司英文名, a.CODATE AS 公司成立时间, 
      b.cTypeName AS 公司类型, c.ename AS 顾问, a.F1 AS 股东一中文姓名, 
      a.F1SUR AS 股东一英文姓, a.F1OTHER AS 股东一英文名, a.CMAN AS 联系人, 
      a.Sex AS 联系人性别, a.CMAIL AS 联系人email, 
      a.CTEL 联系人电话 ,a.CMOB AS 联系人手机
FROM List a INNER JOIN
      alz_companyType b ON a.companyTypeId = b.cTypeId INNER JOIN
      alz_guwen c ON a.GW = c.guwenid
WHERE (c.ename IN (select * from Split(@guwen,','))) AND 
      (a.ATDATEState <> '5')
ORDER BY a.CODATE 

end
posted @ 2011-05-18 15:42  asp_net老友记  阅读(393)  评论(0编辑  收藏  举报