日期:2014-05-18  浏览次数:20430 次

在IN子句中使用变量的查询 Help me 高分
DROP   TABLE   TEST
create   table   test(IDNO   INT   ,NAME   VARCHAR(10))
INSERT   TEST   (IDNO,NAME)   VALUES(1, 'A ')
INSERT   TEST   (IDNO,NAME)   VALUES(2, 'B ')
INSERT   TEST   (IDNO,NAME)   VALUES(3, 'C ')
INSERT   TEST   (IDNO,NAME)   VALUES(4, 'D ')


SELECT   *   FROM   TEST
--过滤条件
DECLARE   @CONDITION   VARCHAR(20)
--动态SQ
DECLARE   @SQLSTR   VARCHAR(3000)

--要IN   中的值用变量来替代

SELECT   *   FROM   TEST   WHERE   NAME   IN   ( 'B ', 'D ')

SET     @CONDITION= 'B ', 'D '     --这句怎么写   单引号和逗号不好处理


SET   @SQLSTR   =   'SELECT   *   FROM   TEST   WHERE   NAME   IN   ( '+@CONDITION+ ') '
EXEC   (@SQLSTR)

以前看过一这个类似的例子,只记得一点是用   NVARCHAR类型的变量再配合   sp_executesql来执行。实在是找不到了。

------解决方案--------------------
如果是字符型用 ' '代替 ',入市是数字行,直接写就可以了

------解决方案--------------------
SET @CONDITION= ' ' 'B ' ', ' 'D ' ' ' --每个单引号变成2个单引号
SET @SQLSTR = 'SELECT * FROM TEST WHERE NAME IN ( '+@CONDITION+ ') '
EXEC (@SQLSTR)
------解决方案--------------------
DROP TABLE TEST
create table test(IDNO INT ,NAME VARCHAR(10))
INSERT TEST (IDNO,NAME) VALUES(1, 'A ')
INSERT TEST (IDNO,NAME) VALUES(2, 'B ')
INSERT TEST (IDNO,NAME) VALUES(3, 'C ')
INSERT TEST (IDNO,NAME) VALUES(4, 'D ')

--过滤条件
DECLARE @CONDITION VARCHAR(20)
--动态SQ
DECLARE @SQLSTR VARCHAR(3000)

--要IN 中的值用变量来替代
SET @CONDITION= ' ' 'B ' ', ' 'D ' ' ' --这句怎么写 单引号和逗号不好处理


SET @SQLSTR = 'SELECT * FROM TEST WHERE NAME IN ( '+@CONDITION+ ') '
EXEC (@SQLSTR)
/*
IDNO NAME
----------- ----------
2 B
4 D
*/
------解决方案--------------------
DROP TABLE TEST
create table test(IDNO INT ,NAME VARCHAR(10))
INSERT TEST (IDNO,NAME) VALUES(1, 'A ')
INSERT TEST (IDNO,NAME) VALUES(2, 'B ')
INSERT TEST (IDNO,NAME) VALUES(3, 'C ')
INSERT TEST (IDNO,NAME) VALUES(4, 'D ')

--过滤条件
DECLARE @CONDITION VARCHAR(20)

SET @CONDITION= 'B,D ' --條件改為這個格式

SELECT * FROM TEST Where CharIndex( ', ' + NAME + ', ', ', ' + @CONDITION + ', ') > 0

GO
------解决方案--------------------
改用CharIndex,可以不使用動態SQL語句
------解决方案--------------------
或者用Like


DROP TABLE TEST
create table test(IDNO INT ,NAME VARCHAR(10))
INSERT TEST (IDNO,NAME) VALUES(1, 'A ')
INSERT TEST (IDNO,NAME) VALUES(2, 'B ')
INSERT TEST (IDNO,NAME) VALUES(3, 'C ')
INSERT TEST (IDNO,NAME) VALUES(4, 'D ')

--过滤条件
DECLARE @CONDITION VARCHAR(20)

SET @CONDITION= 'B,D ' --條件改為這個格式

SELECT * FROM TEST Where ', ' + @CONDITION + ', ' Like '%, ' + NAME + ',% '

GO