Проблема проверки значений SQL с помощью оператора WHEN - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть эта проблема в SQL Server 2008. Я создал таблицу для вставки данных, и затем пользователь сможет проверить, верны ли данные.

CREATE TABLE dbo.temp_horario2 (
idTempHorario INT IDENTITY(1,1) NOT NULL,
idEmpleado VARCHAR(500),
nroDocumento VARCHAR(500),
dia VARCHAR(500),
idHorario VARCHAR(500),
idUsuario INT
);

Мало кто из этих столбцов не долженСохраняйте значения VARCHAR, но я сделал это таким образом, чтобы пользователь мог видеть временную таблицу со всей информацией, которую он вставит (в загрузке с помощью файла CSV). Проблема в том, что при проверке значений этих столбцов с исходными значениями, которые хранятся в других таблицах, я получаю эти ошибки.

Сообщение 245, Уровень 16, Состояние 1, Ошибка строки 1Разговор с высшей доблестью 'asdf' Обозначение смол. Утилита una columna de tipo integer Mayor.

Вот проверяемые мной вставки:

INSERT INTO dbo.temp_horario2 (idEmpleado, nroDocumento, dia, idHorario, idUsuario) VALUES (12, 3224, 1, 1, 1);
INSERT INTO dbo.temp_horario2 (idEmpleado, nroDocumento, dia, idHorario, idUsuario) VALUES (2123, 10782295, 1, 1, 1);
INSERT INTO dbo.temp_horario2 (idEmpleado, nroDocumento, dia, idHorario, idUsuario) VALUES (234324234, 3232495, 34, 2, 34);
INSERT INTO dbo.temp_horario2 (idEmpleado, nroDocumento, dia, idHorario, idUsuario) VALUES ('asdf', 2, 'dsf', 'dos', 34);

И этот запрос вызывает у меня эти ошибки.

SELECT th.idTempHorario, th.idEmpleado, th.nroDocumento, th.dia, th.idHorario, th.idUsuario,
CASE
    WHEN th.idEmpleado IN(SELECT rhem.idEmpleado FROM rrhh.dbo.Empleado AS rhem) THEN 1
    ELSE 0
END AS validacionIdEmpleado,
CASE
    WHEN th.nroDocumento IN(SELECT rhem.numTipoDocuIdent FROM rrhh.dbo.Empleado AS rhem) THEN 1
    ELSE 0
END AS validacionNroDocumento,
CASE
    WHEN th.dia IN(SELECT gd.idDia FROM General.dbo.dia AS gd) THEN 1
    ELSE 0
END AS validacionDia,
CASE
    WHEN th.idHorario IN(SELECT rhas.idHorarioAdmin FROM rrhh.asistencia.horarioAdmin AS rhas) THEN 1
    ELSE 0
END AS validacionIdHorario
FROM database.dbo.temp_horario2 AS th

1 Ответ

2 голосов
/ 29 сентября 2019

Кажется, что подзапросы, которые вы используете после IN, возвращают наборы результатов, содержащие целочисленные значения, поэтому при сравнении столбца varchar, например idEmpleado (и других), вы получаете эту ошибку. Что вы можете сделать, это привести эти значения к varchar следующим образом:

SELECT cast(rhem.idEmpleado AS VARCHAR) FROM rrhh.dbo.Empleado AS rhem

См. demo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...