Сопоставление значений разных типов в двух SQL БД - PullRequest
0 голосов
/ 16 марта 2020

Я переделываю некоторые старые SQL запросы, которые были написаны другими, чтобы они теперь выполнялись в среде Node (я больше знаком с JS, чем с SQL), и я снимаю по этому запросу:

   UPDATE LWA
    SET
    DC.ACTINDX = TR00100.ACTINDX,
    DC.ACTNUMBR_1 = TR00100.ACTNUMBR_1,
    DC.ACTNUMBR_2 = TR00100.ACTNUMBR_2
    FROM [LWA].dcr..dcr_accounts LWA
    INNER JOIN MCDB..TR00100 ON LWA.ACTINDX = TR00100.ACTINDX
    WHERE ACCNUM = '32'

Обратите внимание на эту строку здесь: LWA.ACTINDX = TR00100.ACTINDX

Рассматривая две базы данных, я вижу, что эти два столбца, которые используются для INNER JOIN, имеют Различные типы. LWA.ACTINDX относится к типу varchar(15), а TR00100.ACTINDX относится к типу INT.

Итак, при моем понимании, это не сработает, верно? Другими словами, даже если значения одинаковы, если они разных типов, совпадение никогда не будет найдено. Это правильно, или в этом случае происходит какое-то принуждение типа? И чтобы уточнить, одна база данных - это MariaDB, а другая - SQL Server.

1 Ответ

2 голосов
/ 16 марта 2020

SQL Сервер - как и все базы данных - будет выполнять неявное преобразование типов.

В этом случае строка преобразуется в целое число (или число, или какой-либо другой тип). Если его невозможно преобразовать, вы получите ошибку преобразования типов.

Обратите внимание, что такие преобразования типов часто значительно замедляют запросы, поскольку они часто затрудняют использование индексов.

...