存储过程中当条件是变量的时候出错

zyq5945 2010-06-27 11:12:40
在SQL SERVER 2005中
下面的语句可以查询出结果来
select * from [table] where [id] in ('1', '2')

但是当换成变量代替"'1', '2'"的时候就查询不出结果集
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyq5945 2010-06-27
  • 打赏
  • 举报
回复
谢谢各位大大的帮忙
永生天地 2010-06-27
  • 打赏
  • 举报
回复
把这句
select * from [table] where [id] in ('1', '2')
变一下形式也可以,在传参数时写成 1,2
如下:
set @s='1,2'
select * from [table] where charindex(','+[id]+',',','+@s+',')>0


select * from [table] where charindex(','+[id]+',',',1,2,')>0
zyq5945 2010-06-27
  • 打赏
  • 举报
回复
现在手头没法测试,但感觉6L应该可以.先结贴了.
永生天地 2010-06-27
  • 打赏
  • 举报
回复
用动态语句才能执行正确
luoyoumou 2010-06-27
  • 打赏
  • 举报
回复
-- 应该正确:
ALTER PROCEDURE [dbo].[test_proc] @in -- in 里面的条件 形如:1,2,3
AS
BEGIN
DECLARE @sql VARCHAR(4000);
SET @sql = 'SELECT * FROM [table] where [id] in ('+@in+')';
EXEC(@sql);
END
luoyoumou 2010-06-27
  • 打赏
  • 举报
回复

ALTER PROCEDURE [dbo].[test_proc] @in -- in 里面的条件 形如:1,2,3
AS
BEGIN
DECLARE @sql VARCHAR(4000);
DECLARE @in2 VARCHAR(4000);
SET @sql = 'SELECT * FROM [table] where [id] in ('+@in2+')';
EXEC(@sql);
END
zyq5945 2010-06-27
  • 打赏
  • 举报
回复
''和' + 有区别吗?
you_tube 2010-06-27
  • 打赏
  • 举报
回复
exec 'select * from [table] where [id] in (' + @1 + ', ' + @2 +')'
luoyoumou 2010-06-27
  • 打赏
  • 举报
回复
用动态SQL(用存储过程)
饮水需思源 2010-06-27
  • 打赏
  • 举报
回复
select * from [table] where [id] in (''@1'', ''@2'')

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧