Оператор обновления не работает в хранимой процедуре 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)