首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

在IN子句中使用变量的查询 Help me 高分解决思路

2012-01-13 
在IN子句中使用变量的查询Help me高分DROPTABLETESTcreatetabletest(IDNOINT,NAMEVARCHAR(10))INSERTTEST(

在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


[解决办法]
或者不使用动态SQL:
SET @CONDITION= 'B,D ' --
SELECT * FROM TEST WHERE CHARINDEX( ', ' + NAME + ', ', ', ' + @CONDITION + ', ') > 0
[解决办法]
改用CharIndex或者like, 就沒有必要處理字符串那麼麻煩了,可以直接查詢。

热点排行