UPDATE rptMaster SET
nQtyOnHand = (select (QTYONHND / rptMaster.UOMQTY) from itemMaster
where LOCNCODE = '001' and
itemMaster.ITEMNMBR = CASE
WHEN rptMaster.ITEMNMBR like '%P'
THEN SUBSTRING(rptMaster.ITEMNMBR, 1, DATALENGTH(rptMaster.ITEMNMBR) - 1)
ELSE rptMaster.ITEMNMBR
END)
上述查询有什么问题。它是在sql存储过程中。但我没有看到条件被执行。我正在检查itemnumber是否以'P'结尾,然后我想忽略'P'。该表的记录包含itemnumber,不以'P'结尾,也以'P'结尾。
之前的查询类似于下面的内容,效果很好。
UPDATE rptMaster SET
nQtyOnHand = (select (QTYONHND / rptMaster.UOMQTY) from itemmaster
where LOCNCODE = '001' and
itemmaster.ITEMNMBR = rptMaster.ITEMNMBR)
答案 0 :(得分:1)
你的问题很可能就在这里;
SUBSTRING(rptMaster.ITEMNMBR, 1, DATALENGTH(rptMaster.ITEMNMBR) - 1)
DATALENGTH
以 bytes 返回字符串长度,而SUBSTRING
则以字符为长度。您要使用的不是DATALENGTH
,而是LEN
;
SUBSTRING(rptMaster.ITEMNMBR, 1, LEN(rptMaster.ITEMNMBR) - 1)