注册 登录
编程论坛 SQL Server论坛

aei135版主,请进!关于《SQL视图中的空值如何参与运算?》的帖子

woboy 发布于 2010-10-28 17:06, 766 次点击
https://bbs.bccn.net/thread-319956-1-1.html这个帖子的问题至今一直未解决,能帮我看一下到底是什么问题吗?谢谢!!
9 回复
#2
筱晓绾2010-10-28 17:28
aei135版主?难道不是他就不能进了么?呵呵,
#3
woboy2010-10-28 17:43
呵呵,可以可以,冒犯大家了。只是因为aei135版主帮我解决了问题,想请她继续帮忙!
#4
aei1352010-10-28 21:13
不是说试成功了吗?怎么成未解决了?你的标题可真挺搞笑的,呵呵!
#5
woboy2010-10-30 00:11
第一个问题是解决了!再加了新的语句后又出现新的问题了,还请多多指教!谢谢!
#6
cnfarer2010-10-30 08:23
等着吧!
#7
aei1352010-10-30 14:50
加了什么语句,出了什么问题了,没说清楚。
#8
woboy2010-10-30 15:34
引用早前帖子的内容:
新问题!昨天的问题解决了,谢谢版主们!今天再加了一个语句(红色字体)后出现错误提示!请教怎么回事?
SQL语句:
SELECT TOP 100 PERCENT BOM1.父件货号 AS A0, BOM1.父件货名 AS A0货名,
      BOM1.父件存货类型, BOM1.父件工序 AS A0工序, BOM1.子件货号 AS A1,
      BOM1.子件货名 AS A1货名, BOM1.子件工序 AS A1工序, BOM1.用量,
      BOM2.子件货号 AS A2, BOM2.子件货名 AS A2货名, BOM2.子件工序 AS A2工序,
      BOM3.子件货号 AS A3, BOM3.子件货名 AS A3货名, BOM3.子件工序 AS A3工序,
      BOM4.子件货号 AS A4, BOM4.子件货名 AS A4货名, BOM4.子件工序 AS A4工序,
      BOM5.子件货号 AS A5, BOM5.子件货名 AS A5货名, BOM5.子件工序 AS A5工序,
      BOM6.子件货号 AS A6, BOM6.子件货名 AS A6货名, BOM6.子件工序 AS A6工序,
      BOM7.子件货号 AS A7, BOM7.子件货名 AS A7货名, BOM7.子件工序 AS A7工序,
      LEFT(ISNULL(BOM1.父件货号 + '\', '') + ISNULL(BOM1.子件货号 + '\', '')
      + ISNULL(BOM2.子件货号 + '\', '') + ISNULL(BOM3.子件货号 + '\', '')
      + ISNULL(BOM4.子件货号 + '\', '') + ISNULL(BOM5.子件货号 + '\', '')
      + ISNULL(BOM6.子件货号 + '\', '') + ISNULL(BOM7.子件货号 + '\', ''),
      LEN(ISNULL(BOM1.父件货号 + '\', '') + ISNULL(BOM1.子件货号 + '\', '')
      + ISNULL(BOM2.子件货号 + '\', '') + ISNULL(BOM3.子件货号 + '\', '')
      + ISNULL(BOM4.子件货号 + '\', '') + ISNULL(BOM5.子件货号 + '\', '')
      + ISNULL(BOM6.子件货号 + '\', '') + ISNULL(BOM7.子件货号 + '\', '')) - 1) AS 工艺链,
      LEFT(ISNULL(BOM1.子件工序 + '\', '') + ISNULL(BOM2.子件工序 + '\', '')
      + ISNULL(BOM3.子件工序 + '\', '') + ISNULL(BOM4.子件工序 + '\', '')
      + ISNULL(BOM5.子件工序 + '\', '') + ISNULL(BOM6.子件工序 + '\', '')
      + ISNULL(BOM7.子件工序 + '\', ''), LEN(ISNULL(BOM1.子件工序 + '\', '')
      + ISNULL(BOM2.子件工序 + '\', '') + ISNULL(BOM3.子件工序 + '\', '')
      + ISNULL(BOM4.子件工序 + '\', '') + ISNULL(BOM5.子件工序 + '\', '')
      + ISNULL(BOM6.子件工序 + '\', '') + ISNULL(BOM7.子件工序 + '\', '')) - 1)
      AS 工序链
FROM dbo.wu_bom_no_工艺链 BOM7 RIGHT OUTER JOIN
      dbo.wu_bom_no_工艺链 BOM6 ON
      BOM7.父件货号 = BOM6.子件货号 RIGHT OUTER JOIN
      dbo.wu_bom_no_工艺链 BOM5 ON
      BOM6.父件货号 = BOM5.子件货号 RIGHT OUTER JOIN
      dbo.wu_bom_no_工艺链 BOM4 ON
      BOM5.父件货号 = BOM4.子件货号 RIGHT OUTER JOIN
      dbo.wu_bom_no_工艺链 BOM3 ON
      BOM4.父件货号 = BOM3.子件货号 RIGHT OUTER JOIN
      dbo.wu_bom_no_工艺链 BOM2 ON
      BOM3.父件货号 = BOM2.子件货号 RIGHT OUTER JOIN
      dbo.wu_bom_no_工艺链 BOM1 ON BOM2.父件货号 = BOM1.子件货号
ORDER BY BOM1.父件货号 DESC
错误提示:"substring函数传递了无效的length参数"

只有本站会员才能查看附件,请 登录


补充说明:“子件工序”列的内容为中文,而“货号”列的内容是数字加字符,
是因为格式不同的原因吗?

谢谢!

 

#9
aei1352010-11-01 10:03
这个错误应该是因为LEN(ISNULL(BOM1.子件工序 + '\', '')
      + ISNULL(BOM2.子件工序 + '\', '') + ISNULL(BOM3.子件工序 + '\', '')
      + ISNULL(BOM4.子件工序 + '\', '') + ISNULL(BOM5.子件工序 + '\', '')
      + ISNULL(BOM6.子件工序 + '\', '') + ISNULL(BOM7.子件工序 + '\', ''))-1 的结果为负数导致的,
可以将红色标注的地方替换为:
      LEFT(ISNULL(BOM1.子件工序 + '\', '') + ISNULL(BOM2.子件工序 + '\', '')
      + ISNULL(BOM3.子件工序 + '\', '') + ISNULL(BOM4.子件工序 + '\', '')
      + ISNULL(BOM5.子件工序 + '\', '') + ISNULL(BOM6.子件工序 + '\', '')
      + ISNULL(BOM7.子件工序 + '\', ''), CASE WHEN LEN(ISNULL(BOM1.子件工序 + '\', '')
      + ISNULL(BOM2.子件工序 + '\', '') + ISNULL(BOM3.子件工序 + '\', '')
      + ISNULL(BOM4.子件工序 + '\', '') + ISNULL(BOM5.子件工序 + '\', '')
      + ISNULL(BOM6.子件工序 + '\', '') + ISNULL(BOM7.子件工序 + '\', '')) - 1>=0
      THEN LEN(ISNULL(BOM1.子件工序 + '\', '')
      + ISNULL(BOM2.子件工序 + '\', '') + ISNULL(BOM3.子件工序 + '\', '')
      + ISNULL(BOM4.子件工序 + '\', '') + ISNULL(BOM5.子件工序 + '\', '')
      + ISNULL(BOM6.子件工序 + '\', '') + ISNULL(BOM7.子件工序 + '\', '')) - 1 ELSE 0 END)
      AS 工序链
#10
woboy2010-11-03 10:11
终于解决!谢谢aei135,谢谢
1