Оператор обновления не работает в хранимой процедуре SQL

  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. Но я не вижу, чтобы условие выполнялось. Я проверяю, заканчивается ли номер элемента буквой "P", тогда я хочу игнорировать "P". В таблице есть записи с номером элемента, который не заканчивается на "P", а заканчивается на "P".

Ранее запрос был что-то вроде ниже, который работал нормально.

   UPDATE rptMaster SET 
   nQtyOnHand  = (select (QTYONHND / rptMaster.UOMQTY) from itemmaster 
   where LOCNCODE = '001' and 
   itemmaster.ITEMNMBR = rptMaster.ITEMNMBR)

1 ответ

Решение

Ваша проблема, скорее всего, здесь;

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

DATALENGTH возвращает длину строки в байтах, в то время как SUBSTRING занимает длину в символах. То, что вы хотите использовать, не DATALENGTH, но LEN;

SUBSTRING(rptMaster.ITEMNMBR, 1, LEN(rptMaster.ITEMNMBR) - 1) 
Другие вопросы по тегам