有两个表
其中一个是会员信息表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),各位还有其它的解决这种问题的方法吗?
其中一个是会员信息表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),各位还有其它的解决这种问题的方法吗?
declare @MemName nvarchar(500)
select @MemName=EverName from Member
where MemberShortName ='李三'这里错了,一个变量只能记录一个名字,这个语句完成后变量里放的是最后一个输出的名字
from BuyInfo
where charindex(','+MemberShortName+',',','+@MemName+',')>0
from BuyInfo a
inner join MemberShortName b
on ','+b.EverName+',' like '%,'+a.MemberShortName+',%'
where a.MemberShortName='李三'