在线等:SQL存储过程中使用IN,并且返回查询结果.遇到问题.

abillchen 2008-09-20 06:20:14
下面是我存储过程中要用到的一段代码:
set @IncList=''''+replace(@IncodeList,',',''',''')+''''
select @Num2=max(JiID) from T_SCWuL where InCode in(@IncodeList)
执行没有报错,但是@Num2返回的是NULL,
如果用set @sql='select @Num2=max(JiID) from T_SCWuL where InCode in('+@IncList+')'
再.EXECUTE(@sql)
又报错:@Num2未定义...
请哪位高手帮我想个办法吧.
...全文
113 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
CTCandQJ 2008-11-03
  • 打赏
  • 举报
回复
abillchen 2008-09-20
  • 打赏
  • 举报
回复
再次感谢梁,感谢睛天.
abillchen 2008-09-20
  • 打赏
  • 举报
回复
已经有返回值了.感谢各位高手.
abillchen 2008-09-20
  • 打赏
  • 举报
回复
梁MM....教科书上,怎么没有N这个用法啊.....晕死了.
-晴天 2008-09-20
  • 打赏
  • 举报
回复
set @IncList=''''+replace(@IncodeList,',',''',''')+''''                    
select @Num2=max(JiID) from T_SCWuL where InCode in(@IncodeList)

改成:
select @Num2=max(JiID) from T_SCWuL where InCode in(''''+replace(@IncodeList,',',''',''')+'''') 

试试.
liangCK 2008-09-20
  • 打赏
  • 举报
回复
EXEC sp_executesql @sql,N'@Num2 int OUTPUT',@Num2 OUTPUT 


刚sp_executesql的第二个参数漏了个N
abillchen 2008-09-20
  • 打赏
  • 举报
回复
declare @sql nvarchar(1500)


set @IncList=''''+replace(@IncodeList,',',''',''')+''''

set @sql=N'select @Num2=max(JianRongID) from T_SCWuLiao where InCode in('+@IncList+N')'
EXEC sp_executesql @sql,'@Num2 int OUTPUT',@Num2 OUTPUT



报错:过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。
-晴天 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 abillchen 的回复:]
楼上的MM.能说详细点么?
[/Quote]

小梁MM~~~
hyqwan11112 2008-09-20
  • 打赏
  • 举报
回复

set @IncList=''''+replace(@IncodeList,',',''',''')+''''
select @Num2=max(JiID) from T_SCWuL where InCode in(@IncodeList)
--这个应该是没有满足条件的
--至于第二句,要用sp_executesql这个系统存储过程
exec sp_executesql @sql,N'@Num2 int output',@Num2 output
-晴天 2008-09-20
  • 打赏
  • 举报
回复
你对逗号的转义不正确.你想把 , 转为 ',' ,但这不能用来赋值的.如:
@IncldeList为 abc,efg,hig
set @IncList=''''+replace(@IncodeList,',',''',''')+''''
意味着把@IncList赋为 'abc','efg','hig'
SQL里是不能这样赋值的.
你下面的一句,set @sql='select @Num2=max(JiID) from T_SCWuL where InCode in('+@IncList+')'
@sql语句中出现的 @Num2 是不能直接获得数值的,因为执行execute时,已经不在同一个批里,变量无法传递了.
abillchen 2008-09-20
  • 打赏
  • 举报
回复
感谢感谢...我试试.....
abillchen 2008-09-20
  • 打赏
  • 举报
回复
楼上的MM.能说详细点么?
liangCK 2008-09-20
  • 打赏
  • 举报
回复
set @IncList=''''+replace(@IncodeList,',',''',''')+''''                    
--select @Num2=max(JiID) from T_SCWuL where InCode in(@IncodeList)

DECLARE @SQL NVARCHAR(4000);
DECLARE @Num2 INT;

SET @SQL=N'select @Num2=max(JiID) from T_SCWuL where InCode in('+@IncList+N')';

EXEC sp_executesql @SQL,'@Num2 int OUTPUT',@Num2 OUTPUT;

SELECT @Num2;
昵称被占用了 2008-09-20
  • 打赏
  • 举报
回复
declare @sql nvarchar(4000)

set @IncList=''''+replace(@IncodeList,',',''',''')+''''
set @sql=N'select @Num2=max(JiID) from T_SCWuL where InCode in('+@IncList+')'

EXEC sp_executesql @sql,N'@Num2 int output',@Num2 output

liangCK 2008-09-20
  • 打赏
  • 举报
回复
使用sp_executesql存储过程output带出参数.

22,210

社区成员

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

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