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

加载数据
CREATE TABLE #tb 
(id VARCHAR(10))
INSERT INTO #tb 
SELECT '1'
UNION ALL
SELECT '2'
UNION all
SELECT '3'
UNION ALL
SELECT '4'
UNION 
SELECT '5'


declare @code varchar(5000)
set @code=',1,2,3,4'
SELECT REPLACE(''''+@code+'''',',',''',''')
SELECT * FROM #TB WHERE id IN  (REPLACE(''''+@code+'''',',',''',''') )
----得不出数据

SELECT * FROM #TB WHERE id IN('','1','2','3','4')
---只有这样才可以得到数据


各位大侠,这是什么原因呀。
数据

------解决方案--------------------
引用:
@AndyHang 
谢谢
想问一下,前面那种方法为什么不行呀。


declare @code varchar(5000)
set @code=',1,2,3,4'
print REPLACE(''''+@code+'''',',',''',''')
/*
'','1','2','3','4'  
*/
-->结果是一个字符串,连接在一起的,它没有分离成独立的单个元素
而打印出来的整个字符串就是一个元素,IN函数是元素的值完全匹配,表里的值只有单个1,2,3,4
所以查询没有结果

------解决方案--------------------
引用:
@AndyHang 
谢谢
想问一下,前面那种方法为什么不行呀。

declare @code varchar(5000)
set @code=',1,2,3,4'
SELECT REPLACE(''''+@code+'''',',',''',''') --不能用这种写法,

SELECT * FROM #TB WHERE id IN  (REPLACE(''''+@code+'''',',',''',''') ) 
--这行语句相当于:
SELECT * FROM #TB WHERE id IN (''''',''1'',''2'',''3'',''4''')
SELECT * FROM #TB WHERE id IN (@某一变量) --它会把你的整个字符串看成一个值,而不是"空,1,2,3,4"多个值