日期:2014-05-17  浏览次数:20634 次

如何用变量做为WHERE的过滤条件?
前台程序传回一个变量 @var varchar(100)

格式为 A.,B.,C.,X.,Y. ....

比如: @var = 'YZ.,PB.,YH.' (长短不一)

字符中的这个变量我是要传到SQL的 where 语句中,用于对条件的过滤。

比如:


--创建表#T_A
create table #T_A (TYPE VARCHAR(100))

INSERT #T_A VALUES ('YZ.')
INSERT #T_A VALUES ('PB.')
INSERT #T_A VALUES ('JGB.')
INSERT #T_A VALUES ('WK.')
INSERT #T_A VALUES ('DL.')
INSERT #T_A VALUES ('PFB.')

declare @var varchar(100)

set @var = 'YZ.,PB.,YH.' --前台传过来的变量

--给逗号前后加上'字符
SET @var = (SELECT '''' + REPLACE(@var, ',', ''',''') + '''')

--查询,但查不到记录
SELECT * FROM  #T_A  WHERE TYPE IN (@var)

----------------------------
--想要实现的效果
SELECT * FROM #T_A WHERE TYPE IN ('YZ.','PB.','YH.')
SQL

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

create table #T_A (TYPE VARCHAR(100))
 
INSERT #T_A VALUES ('YZ.')
INSERT #T_A VALUES ('PB.')
INSERT #T_A VALUES ('JGB.')
INSERT #T_A VALUES ('WK.')
INSERT #T_A VALUES ('DL.')
INSERT #T_A VALUES ('PFB.')
 
declare @var varchar(100),@sql VARCHAR(MAX)
set @var = 'YZ.,PB.,YH.' --前台传过来的变量
--给逗号前后加上'字符
SET @var = (SELECT '''' + REPLACE(@var, ',', ''',''') + '''')
SET @sql='SELECT * FROM  #T_A  WHERE TYPE IN ('+@var+')'
EXEC(@sql)