有两个表
其中一个是会员信息表Member包含字段(id int,MemberShortName nvarchar(50),EverName nvarchar(500) )
id是整型主键,MemberShortName是会员简称,EverName包含会员曾经用过的以逗号分隔的简称,例如:1,'李三','李三,李三哥,李三弟'
2,'张四','张四'
3,'王五','王五,王老五'
另外一张表是消费信息表BuyInfo,记录的是会员以不同的简称的消费记录(id int,BuyDate smalldatetime,MemberShortName nvarchar(50),Buy int) 例如:1,'2010/5/12','李三',200
2,'2010/4/30','李哥',100
3,'2010/5/12','王老五',50现在我想把现在会员简称为'李三'的消费记录全部查询出来,首先使用一个nvarchar变量存放所有曾经用过的会员名
declare @MemName nvarchar(500)
select @MemName=EverName from Member 
where MemberShortName ='李三'再使用in
select * from BuyInfo where MemberShortName in(@MemName)
这时候查询不到正确的结果我试过用动态生成sql语句的方式可以找到结果:
declare @strsql nvarchar(4000)
set @strsql ='select * from BuyInfo where MemberShortName in('+@MemName+')'
exec (@strsql)
但是这种方式比较麻烦(比如要指定日期时,动态生成的SQL中也要将日期转换成nvarchar),各位还有其它的解决这种问题的方法吗?

解决方案 »

  1.   

    太多了,没怎么看懂,你用charindex试试吧
      

  2.   

    select * from where charindex(','+MemberShortName +',',','+@MemName+',')>0 
      

  3.   

    现在我想把现在会员简称为'李三'的消费记录全部查询出来,首先使用一个nvarchar变量存放所有曾经用过的会员名
    declare @MemName nvarchar(500)
    select @MemName=EverName from Member 
    where MemberShortName ='李三'这里错了,一个变量只能记录一个名字,这个语句完成后变量里放的是最后一个输出的名字
      

  4.   

    select * 
    from BuyInfo 
    where charindex(','+MemberShortName+',',','+@MemName+',')>0
      

  5.   

    select b.MemberShortName,a.BuyDate,a.MemberShortName as MemberShortName_a,a.Buy 
    from BuyInfo a
    inner join MemberShortName b
    on ','+b.EverName+',' like '%,'+a.MemberShortName+',%'
    where a.MemberShortName='李三'
      

  6.   

    谢谢各位以前也想过用charindex 但是考虑到曾用名只有一个时没有逗号不知道怎么处理,没想到在原字段前后各多加一个逗号就行了