string a = string.Format("select * from table where id in ({0}) ",abc)
declare @B varchar(20) select @B=replace(replace(A_ID,' ',''),',',''',''') from B declare @A varchar(100) set @A='select * from A where ID in ('''+@B+''')' select @A exec (@A)或者用游标的方式
据说一句SQL无解的 要么存储过程,要么查两次 SELECT '''' + REPLACE(a,',',''',''') + '''' AS all FROM ( SELECT A_ID AS a FROM B) a 再查一下 SELECT * FROM dbo.A WHERE ID IN (all)
明白楼主的意思了,首先你B表里存的值有问题,要用分隔符,就每一个数字后面都把分隔符带上。 "1,2,3" 可以改成 "1,2,3,"。 这样在查询的时候就可以这么写了:select top 10 * from dbo.A a with(nolock) where exists(select top 1 1 from dbo.B b with(nolock) where b.A_ID like '%'+CAST(a.id as nvarchar(10))+',%')
/*可以用charindex内置函数*/ select * from A where charindex(','+ID+',',',1,2,3,')>0
"in "+ str??
or B.A_Id ='3'据长辈说OR效率低
然后就想问下有没有一条sql语句能直接查出来结果的
7楼的哥们 1 2 3是B表中的A_ID字段(varchar)的值"1,2,3" 不是死值 怎么能截取出来 1 2 3 ??又怎么能根据A_id里面的值 设置where条件? 这是个问题
select @B=replace(replace(A_ID,' ',''),',',''',''') from B
declare @A varchar(100)
set @A='select * from A where ID in ('''+@B+''')'
select @A
exec (@A)或者用游标的方式
要么存储过程,要么查两次
SELECT
'''' + REPLACE(a,',',''',''') + '''' AS all
FROM (
SELECT A_ID AS a FROM B) a
再查一下
SELECT * FROM dbo.A WHERE ID IN (all)
"1,2,3" 可以改成 "1,2,3,"。
这样在查询的时候就可以这么写了:select top 10 * from dbo.A a with(nolock)
where exists(select top 1 1 from dbo.B b with(nolock)
where b.A_ID like '%'+CAST(a.id as nvarchar(10))+',%')
select * from A where charindex(','+ID+',',',1,2,3,')>0