设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1949|回复: 3
打印 上一主题 下一主题

[求助]请问在存储过程中使用带变量的in谓句

[复制链接]
跳转到指定楼层
1#
发表于 2005-10-5 05:09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在存储过程中,我想使用下面的T-SQL语句:

select 姓名,职务 from 人事表 where 自动编号 in (1,3,5,7) ORDER by 姓名

只是in谓句中的1,3,5,7是动态从变量参数中取得的,我的存储过程代码如下:

Altor Procedore RenList

@IDlist Varchar(50)

As

select 姓名,职务 from 人事表 where 自动编号 in ('+ @IDlist +') ORDER by 姓名

return


在双击存储过程执行时,没有跳出参数输入对话框,而是出现下面的错误提示:

syntax error comerting the varchar value '+ @IDlist +' to a column of data type int

大致意思应该是数据类型不符。我写了一个存储过程,测试了一下这条SELECT语句:

Altor Procedore RenList

@IDlist Varchar(50)

As

declare @SQLstr varchar(100)

set @SQLstr='select 姓名,职务 from 人事表 where 自动编号 in ('+ @IDlist +') ORDER by 姓名'

insert into abc(a) values(@SQLstr)

return


执行存储过程,输入参数:8,15,25,50

然后打开表abc查看插入的记录,结果为:

select 姓名,职务 from 人事表 where 自动编号 in (8,15,25,50) ORDER by 姓名

这条select语句看不出有什么问题,为什么用我的写法在存储过程中无法执行呢?

请高手帮忙看看,谢谢!

[此贴子已经被作者于2005-10-4 21:09:53编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-10-5 16:02:00 | 只看该作者
我也是剛升遷至ADP,對這個不是很清楚試試select 姓名,职务 from 人事表 where convert(自动编号 as varchar(2)) in ('+ @IDlist +') ORDER by 姓名

至於后面那個為啥能不,我就不知道了.另外:Altor Procedore RenList(手誤吧)應為Alter procedure RenList(呵呵...有點雞婆)順便再問一下.'+ @IDlist +'里面的'+'表示什麼意思???
3#
 楼主| 发表于 2005-10-6 22:46:00 | 只看该作者
以下是引用ADAM在2005-10-5 8:02:00的发言:



我也是剛升遷至ADP,對這個不是很清楚

試試select 姓名,职务 from 人事表 where convert(自动编号 as varchar(2)) in ('+ @IDlist +') ORDER by 姓名



至於后面那個為啥能不,我就不知道了.

另外:Altor Procedore RenList(手誤吧)

應為Alter procedure RenList(呵呵...有點雞婆)

順便再問一下.'+ @IDlist +'里面的'+'表示什麼意思???

不好意思,确实是手误。

'+ @IDlist +'里面的'+'表示连接,等于VBA中的"&"
4#
 楼主| 发表于 2005-10-6 22:52:00 | 只看该作者
在旧贴中找到一个方法,可将解决这个问题了:Altor Procedore RenList

@IDlist nvarchar(50)

As

declare @SQLstr nvarchar(100)

set @SQLstr='select 姓名,职务 from 人事表 where 自动编号 in ('+ @IDlist +') ORDER by 姓名'

exec sp_executesql @SQLstr

return
主要是用到SQL的系统存储过程:sp_executesql ,它的使用方法在SQL的联机丛书中有详细介绍。另外,@IDlist nvarchar(50)一定要用nvarchar,而不能用varchar,否则会报错。因自动编号是int类型,所以在输入参数时,格式为:1,5,12,24,如果是字符型的,格式应为:'张三','李四','王二'

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-5-4 06:01 , Processed in 0.150322 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表