存储过程 指定的参数过多

ajun99 2010-03-02 08:53:01
存储过程如下:
CREATE PROCEDURE fujianbiao
@bianliang varchar(50),
@fid varchar(200)

AS
select * from (SELECT linbbb.*, dbo.cp_danjian.物料编号, dbo.cp_danjian.物料名称,
dbo.cp_danjian.规格描述
FROM (SELECT TOP 100 PERCENT 订单号, myid, SUM(CASE WHEN 单据类型 = '出' AND
((工序 = '毛坯') or ((工序='成品') and 入库单号 like 'bcpc%')) THEN 数量 END) AS 毛坯出, MAX(CASE WHEN 单据类型 = '出' AND
((工序 = '毛坯') or ((工序='成品') and 入库单号 like 'bcpc%')) THEN 日期 END) AS 毛坯出日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '车削加工' THEN 数量 END) AS 车削加工入,
MAX(CASE WHEN 单据类型 = '入' AND 工序 = '车削加工' THEN 日期 END)
AS 车削加工日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '数控加工' THEN 数量 END) AS 数控加工入,
MAX(CASE WHEN 单据类型 = '入' AND 工序 = '数控加工' THEN 日期 END)
AS 数控加工日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '辅件成型加工' THEN 数量 END) AS 辅件成型加工入,
MAX(CASE WHEN 单据类型 = '入' AND 工序 = '辅件成型加工' THEN 日期 END)
AS 辅件成型加工日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '抛光' THEN 数量 END) AS 抛光入, MAX(CASE WHEN 单据类型 = '入' AND
工序 = '抛光' THEN 日期 END) AS 抛光日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '热处理' THEN 数量 END) AS 热处理入, MAX(CASE WHEN 单据类型 = '入' AND
工序 = '热处理' THEN 日期 END) AS 热处理日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '研磨' THEN 数量 END) AS 研磨入, MAX(CASE WHEN 单据类型 = '入' AND
工序 = '研磨' THEN 日期 END) AS 研磨日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '电镀' THEN 数量 END) AS 电镀入, MAX(CASE WHEN 单据类型 = '入' AND
工序 = '电镀' THEN 日期 END) AS 电镀日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '组装' THEN 数量 END) AS 组装入, MAX(CASE WHEN 单据类型 = '入' AND
工序 = '组装' THEN 日期 END) AS 组装日期, SUM(CASE WHEN 单据类型 = '入' AND
工序 = '成品' THEN 数量 END) AS 成品入, MAX(CASE WHEN 单据类型 = '入' AND
工序 = '成品' THEN 日期 END) AS 成品日期
FROM dbo.aaa
WHERE 订单号=@bianliang
GROUP BY 订单号, myid
ORDER BY 订单号
) linbbb LEFT OUTER JOIN
dbo.cp_danjian ON linbbb.myid = dbo.cp_danjian.id) ddd where myid in (@fid)
GO


fujianbiao JL10001, 20124 这样调用正常
fujianbiao JL10001, 20124, 20171, 20190, 20191, 20192, 20193, 20194, 20195, 20196,
20211 这样调用就出错
可是fid 这个变量有可能是一个id,也可能是多个id组成, 请问怎么解决这个问题,在线等。急
...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tstfish 2010-03-02
  • 打赏
  • 举报
回复
按照你的思路,没法解决,一个是因为参数不支持数组,而是过程不支持重载。

可以变通一下,要么拼串,要么参数作为'20124, 20171, 20190, 20191, 20192, 20193, 20194, 20195, 20196, 20211 '框起来。
ajun99 2010-03-02
  • 打赏
  • 举报
回复
恩, 可以了, 真是太感谢了, 我想了一晚上都没想出来怎么弄
songguozhi 2010-03-02
  • 打赏
  • 举报
回复
路过………………
路过^^^^^…………
快乐_石头 2010-03-02
  • 打赏
  • 举报
回复
--這樣調用
exec fujianbiao 'JL10001', '20124,20171,20190,20191,20192,20193,20194,20195,20196,20211'
ajun99 2010-03-02
  • 打赏
  • 举报
回复
执行fid中有多个id 还是指定的参数过多
ajun99 2010-03-02
  • 打赏
  • 举报
回复
好的, 我试试看,先谢了啊
快乐_石头 2010-03-02
  • 打赏
  • 举报
回复
where myid in (@fid)
-->改
where charindex(','+ltrim(myid)+',',','+@fid+',')>0

22,209

社区成员

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

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