Возможно ли, что две разные базы данных SQL Server, имеющие одинаковую схему и данные, могли обрабатывать запрос по-разному, и одна из них выдает ошибку "Error converting data type varchar to numeric.
", а другая - нет?
Например, см. Этот запрос:
SELECT count(*) FROM DEPARTMENTS dpt
inner join
EMPLOYEES emp
on dpt.subgroup_id = emp.subgroup_id
WHERE
emp.employee_id = 12856
and
dpt.department_id in
(
select cm.mapped_value from CONFIGURATIONS c
inner join
CONFIG_MAPPINGS cm on cm.configuration_id = c.id
where
c.name = 'Department that can override self-destruction protocol'
)
Внутренний подзапрос select возвращает либо значение, которое может быть приведено к числу, либо результаты вообще отсутствуют.Итак, я заметил, что:
- Одна база данных, работающая
Microsoft SQL Server 2012 - 11.0.2100.60
, выполняет запрос без ошибок, пока внутренний оператор не вернет нечисловое значение - Другая база данных, работающая
Microsoft SQL Server 2012 (SP4-GDR) (KB4057116) - 11.0.7462.6
, всегда выдает ошибку «Error converting data type varchar to numeric.
», независимо от того, что возвращает внутренний запрос выбора.
Я также заметил, что если я изменю подзапрос другим, которыйвозвращает точно так же, но без внутреннего объединения, вторая база данных не выдает ошибку
SELECT count(*) FROM DEPARTMENTS dpt
inner join
EMPLOYEES emp
on dpt.subgroup_id = emp.subgroup_id
WHERE
emp.employee_id = 12856
and
dpt.department_id in
(
select cm.mapped_value FROM CONFIG_MAPPINGS
WHERE cm.configuration_id = 'DPT_OVERRIDE_SDP'
)
Я знаю, что мне все равно нужно улучшить запрос, добавив проверку ISNUMERIC
, но просто из любопытства, мой вопрос:
Может ли быть так, что одна из этих баз данных обрабатывает запрос другим способом (возможно, другой план выполнения) и всегда выдает ошибку, в то время как другой базе данных удается выполнить запрос?