更新语句在SQL存储过程中不起作用

时间:2013-12-28 00:07:58

标签: sql-server-2008 sql-update substring sql-like

  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)

1 个答案:

答案 0 :(得分:1)

你的问题很可能就在这里;

SUBSTRING(rptMaster.ITEMNMBR, 1, DATALENGTH(rptMaster.ITEMNMBR) - 1) 

DATALENGTH bytes 返回字符串长度,而SUBSTRING则以字符为长度。您要使用的不是DATALENGTH,而是LEN;

SUBSTRING(rptMaster.ITEMNMBR, 1, LEN(rptMaster.ITEMNMBR) - 1)