检查下数据表的数据特别是:dbo.wlsfhz表的“商品代码”字段,有没有记录的“商品代码”为空格或者特别短,这些记录在有其他条件的时候不会被计算,但是当没有条件的时候在计算 LEFT(dbo.wlsfhz.商品代码, CHARINDEX(''.'',
dbo.wlsfhz.商品代码, '+cast(@begindex as varchar(10))+') - 1)
的时候出错。猜一下,反正你一个多月没解决了,试一下无妨。
dbo.wlsfhz.商品代码, '+cast(@begindex as varchar(10))+') - 1)
的时候出错。猜一下,反正你一个多月没解决了,试一下无妨。
看这个表的时侯,想起领导讲过要实现能够查询到六级代码,即begindex这个字段的值最大应该到19才对(按LEFT(dbo.wlsfhz.商品代码, CHARINDEX(''.'',
dbo.wlsfhz.商品代码, '+cast(@begindex as varchar(10))+') - 1)这个写法),以前没注意,现在才发现试了一下,才发现如果在查询分析器中调试存储过程,输入begindex为19,则会提示"服务器: 消息 536,级别 16,状态 3,行 1
向 substring 函数传递了无效的 length 参数。"
所以我认为可能还是写法有问题,但是问题在哪里,我又不清楚了!
向 substring 函数传递了无效的 length 参数。"
"
dbo.wlsfhz.商品代码, '+cast(@begindex as varchar(10))+') - 1) = AIS20050616112908J.dbo.t_Item.FNumber AND
AIS20050616112908J.dbo.t_Item.FItemClassID = 2001-->
ON AIS20050616112908J.dbo.t_Item.FItemClassID = 2001 and
case when len(dbo.wlsfhz.商品代码)<='+cast(@begindex as varchar(10))+' then ''''
when len(dbo.wlsfhz.商品代码)>'+cast(@begindex as varchar(10))+' and CHARINDEX(''.'',
dbo.wlsfhz.商品代码, '+cast(@begindex as varchar(10))+')>0 then
LEFT(dbo.wlsfhz.商品代码, CHARINDEX(''.'',
dbo.wlsfhz.商品代码, '+cast(@begindex as varchar(10))+') - 1)
else ''''
end= AIS20050616112908J.dbo.t_Item.FNumber --试下,有点乱,可能写错了
int、smallint 或 tinyint char *
varchar *
nchar E
nvarchar E
money、smallmoney、numeric、decimal、float 或 real char E
varchar E
nchar E
nvarchar E
* 结果长度太短而无法显示。
E 因为结果长度太短无法显示而返回错误。