Office中国论坛/Access中国论坛

标题: 为何在IN子句中只接受一个参数 [打印本页]

作者: yodong    时间: 2004-6-10 01:11
标题: 为何在IN子句中只接受一个参数
为何在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'

不知何故,我直接打开存储过程,在提示框中输入值,也没有记录.大家帮我看看错在哪里.
作者: yodong    时间: 2004-6-10 04:38
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'好奇怪呀!!
作者: goodidea    时间: 2004-6-10 07:31
你必须先定义一个字符串变量(@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)这种方式来执行。
作者: yodong    时间: 2004-6-10 19:24
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
作者: goodidea    时间: 2004-6-11 01:53
@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'”
作者: yodong    时间: 2004-6-11 02:05
谢谢 goodidea版主,我在HG和你的的帮助下,终于调通了.但还有一些小问题:http://www.office-cn.net/bbs/dispbbs.asp?boardid=5&id=17759&star=1#17759谢谢goodidea版主




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