设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

为何在IN子句中只接受一个参数

[复制链接]
跳转到指定楼层
1#
发表于 2004-6-10 01:11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为何在IN子句中只接受一个参数

我的存谁储过程如下:

SELECT 交检单号, 交检日期, 产品型号, 产品编号, 初检, 初检日期, 一体化型号, 一体化编号,

      电源盒编号, 备注

FROM dbo.[tbl交检单-编号]

WHERE (交检单号 IN (@b)) AND (初检 = 0) AND (返修 = 0)

作为子窗体的据源:

Me.subform.Form.RecordSource = "exec pro在检编号变更" & s

出现如下问题:

当我的变量S的值是一个的时候:

如:'JJ040608-002'   则可以得到结果.

但当S的值是如下的的时候却没有记录,'JJ040608-002','JJ040608-003'

不知何故,我直接打开存储过程,在提示框中输入值,也没有记录.大家帮我看看错在哪里.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2004-6-10 04:38:00 | 只看该作者
SELECT 交检单号, 交检日期, 产品型号, 产品编号, 初检, 初检日期, 一体化型号, 一体化编号,

      电源盒编号, 备注

FROM dbo.[tbl交检单-编号]

WHERE (交检单号 IN ('JJ040608-001', 'JJ040608-002', 'JJ040608-003')) AND (初检 = 0) AND

      (返修 = 0)上面的语句是可以的,但一写成如下:SELECT 交检单号, 交检日期, 产品型号, 产品编号, 初检, 初检日期, 一体化型号, 一体化编号,

      电源盒编号, 备注

FROM dbo.[tbl交检单-编号]

WHERE (交检单号 IN (@s)) AND (初检 = 0) AND

      (返修 = 0)只能接受一个参数'JJ040608-001'好奇怪呀!!
3#
发表于 2004-6-10 07:31:00 | 只看该作者
你必须先定义一个字符串变量(@strsql),然后赋值给他,是由SELECT 交检单号, 交检日期, 产品型号, 产品编号, 初检, 初检日期, 一体化型号, 一体化编号,

      电源盒编号, 备注

FROM dbo.[tbl交检单-编号]

WHERE (交检单号 IN (@s)) AND (初检 = 0) AND

      (返修 = 0)转换成的字符串SELECT 交检单号, 交检日期, 产品型号, 产品编号, 初检, 初检日期, 一体化型号, 一体化编号,

      电源盒编号, 备注

FROM dbo.[tbl交检单-编号]

WHERE (交检单号 IN ('JJ040608-001', 'JJ040608-002', 'JJ040608-003')) AND (初检 = 0) AND

      (返修 = 0)然后用execute (@strsql)这种方式来执行。
4#
 楼主| 发表于 2004-6-10 19:24:00 | 只看该作者
goodidea版主:我的存储过程名为:"pro在检编号变更"根据你的意思我的存储过程要怎样改呢?是不是这样ECLARE strsql nvarchar(4000)

SET strsql = 'seLECT 交检单号, 交检日期, 产品型号, 产品编号, 初检, 初检日期, 一体化型号,

              一体化编号, 电源盒编号, 备注

        FROM dbo.[tbl交检单-编号]

        WHERE (交检单号 IN (@b)) AND (初检 = 0) AND (返修 = 0)'go

     execute((@strsql)但是会报错:ADO错误:'nvarchar'不是可以识别的CURSOR选项.你这个语句在VBA中还可以象以下这样调用吗?我只要是用来做为一个子窗体的数据源来用的.

Me.subform.Form.RecordSource = "exec pro在检编号变更" & s
5#
发表于 2004-6-11 01:53:00 | 只看该作者
@b这里要处理一下DECLARE strsql nvarchar(4000)

SET strsql = 'seLECT 交检单号, 交检日期, 产品型号, 产品编号, 初检, 初检日期, 一体化型号,

              一体化编号, 电源盒编号, 备注

        FROM dbo.[tbl交检单-编号]

        WHERE (交检单号 IN (' + @b + ' )) AND (初检 = 0) AND (返修 = 0)'     execute(@strsql)go传入@b时候,应该包含分隔符即=“'JJ040608-001', 'JJ040608-002', 'JJ040608-003'”
6#
 楼主| 发表于 2004-6-11 02:05:00 | 只看该作者
谢谢 goodidea版主,我在HG和你的的帮助下,终于调通了.但还有一些小问题:http://www.office-cn.net/bbs/dispbbs.asp?boardid=5&id=17759&star=1#17759谢谢goodidea版主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-7 21:24 , Processed in 0.175868 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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