Office中国论坛/Access中国论坛

标题: [求助]请问在存储过程中使用带变量的in谓句 [打印本页]

作者: zyp    时间: 2005-10-5 05:09
标题: [求助]请问在存储过程中使用带变量的in谓句
在存储过程中,我想使用下面的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编辑过]


作者: ADAM    时间: 2005-10-5 16:02
我也是剛升遷至ADP,對這個不是很清楚試試select 姓名,职务 from 人事表 where convert(自动编号 as varchar(2)) in ('+ @IDlist +') ORDER by 姓名

至於后面那個為啥能不,我就不知道了.另外:Altor Procedore RenList(手誤吧)應為Alter procedure RenList(呵呵...有點雞婆)順便再問一下.'+ @IDlist +'里面的'+'表示什麼意思???
作者: zyp    时间: 2005-10-6 22:46
以下是引用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中的"&"
作者: zyp    时间: 2005-10-6 22:52
在旧贴中找到一个方法,可将解决这个问题了: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,如果是字符型的,格式应为:'张三','李四','王二'






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3