Я сравниваю данные из двух разных баз данных (одна MariaDB и одна SQL Сервер) в моем проекте Node, а затем выполняю вставки и обновления по мере необходимости в зависимости от результатов сравнения.
У меня есть вопрос об этом коде, который я использую, чтобы перебирать результаты в Node, переходя по одному за раз и передавая значения для проверки (примечание - я больше знаком с Node и JS, чем с SQL, отсюда этот вопрос):
SELECT TOP 1
CASE
WHEN RM00101.CUSTCLAS LIKE ('%CUSR%')
THEN CAST(REPLACE(LEFT(LR301.DOCNUMBR, CHARINDEX('-', LR301.DOCNUMBR)), '-', '') AS INT)
ELSE 0
END AS Id,
CASE
WHEN LR301.RMDTYPAL = 7 THEN LR301.ORTRXAMT * -1
WHEN LR301.RMDTYPAL = 9 THEN LR301.ORTRXAMT * -1
ELSE LR301.ORTRXAMT
END DocumentAmount,
GETDATE() VerifyDate
FROM
CRDB..RM20101
INNER JOIN
CRDB..RM00101 ON LR301.CUSTNMBR = RM00101.CUSTNMBR
WHERE
CONVERT(BIGINT, (REPLACE(LEFT(LR301.DOCNUMBR, CHARINDEX('-', LR301.DOCNUMBR)), '-', ''))) = 589091
В настоящее время вышеупомянутое работает для меня, чтобы найти записи, которые соответствуют. Однако, если я ввожу значение, которое еще не существует - в этой строке ниже, например, так:
WHERE CONVERT(BIGINT, (REPLACE(LEFT( LR301.DOCNUMBR, CHARINDEX('-', LR301.DOCNUMBR)), '-', ''))) = 789091
Я получаю эту ошибку:
Ошибка преобразования типа данных varchar в bigint.
Я предполагаю, что проблема заключается в том, что, если значение не найдено, оно не может привести его к INTEGER и поэтому выдает ошибку. Звучит правильно?
В идеале я хочу, чтобы запрос успешно выполнялся, а просто возвращал 0 результатов, если совпадение не найдено. В JavaScript я мог бы сделать что-то вроде предложения OR
, чтобы справиться с этим:
const array = returnResults || [];
Но я не уверен, как справиться с этим с помощью SQL.
. Кстати, значение в SQL Соответствующем сервере имеет тип char(21)
, и значения выглядят так: 00000516542-000
. Значение в MariaDB имеет тип INT
.
Итак, два вопроса:
Появится ли эта ошибка при вводе значения, которое в данный момент не соответствует?
Если так, как я могу справиться с этим, чтобы просто вернуть 0 строк, когда совпадение не найдено?
Кстати, как добавленное примечание, кто-то предложил использовать TRY_CONVERT
, но хотя это работает на SQL сервере, оно не работает, когда я использую его с пакетом NODE mssql
.