CREATE PROCEDURE sp_test @id int AS select * from db_test where id=@id
GO这样只能接收一个id,查出一行记录
但是我想从另外一个表中读一个字符串,字段值形式为(1,3,5,8),然后传入存储过程中,查出 1,3,5,8 对应的数据
请问应该怎么做??
GO这样只能接收一个id,查出一行记录
但是我想从另外一个表中读一个字符串,字段值形式为(1,3,5,8),然后传入存储过程中,查出 1,3,5,8 对应的数据
请问应该怎么做??
set @s2 = '1,2,3'
set @s='select * from a where a.id in (' + @s2 + ')'
select @s
exec (@s)
exec('select * from db_test where 序号 in ('+@id+')')
-----------------------------------------------
exec sp_test '1,3,5,8'
set @s2 = '1,2,3'
set @s='select * from a where a.id in (' + @s2 + ')'
--注释
--select @s
exec (@s)
exec('select * from db_test where 序号 in ('+@id+')')
-----------------------------------------------
exec sp_test '1,3,5,8'
像这样,只查出了id=1这一行,表里有1,2,3,4,5,6共6行
select * from db_test where 序号 in (1,2,3,4,5,6) 看能不能查到6行
AS
select * from db_test where CharIndex(',' + Rtrim(id) + ',', ',' + @id + ',') > 0
GO
用select * from db_test where id in (1,2,3,4,5,6)
可以查到这6行
id字段是int类型存储过程里是@id varchar(500),这样行吗?CREATE PROCEDURE sp_test @id varchar(500) AS
exec('select * from db_test where 序号 in ('+@id+')')
AS
select * from db_test where CharIndex(',' + Rtrim(id) + ',', ',' + @id + ',') > 0
GO
用CharIndex解决了问题请解释一下,Rtrim(id)是什么意思,如果没有Rtrim,就提示数据类型出错,Rtrim好像是去掉字符右边的空格嘛
这样写是什么意思呢谢谢指教!
AS
select * from db_test where CharIndex(',' + Cast(id As Varchar) + ',', ',' + @id + ',') > 0
GO這樣,更容易理解一些。