使用 WHEN 语句检查 SQL 值时出现问题
Problem checking SQL values with WHEN statement
我在 SQL Server 2008 中遇到这个问题。我创建了一个 table 来插入数据,然后用户将能够检查数据是否正确。
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 值,但我已经这样做了,因此用户将能够看到一个临时的 table,其中包含他将插入的所有信息(在大量上传中使用 csv 文件)。问题是,当我使用存储在其他 table 中的原始值检查这些列的值时,出现这些错误。
Msg 245, Level 16, State 1, Line 1 Error de conversión al convertir el
valor varchar 'asdf' al tipo de datos smallint.
-
La conversión del valor varchar '234324234' ha desbordado una columna
INT2. Utilice 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
您在 IN
return 结果集之后使用的子查询似乎包含整数值,因此当您将 varchar
列(如 idEmpleado
(和其他列)与他们你得到那个错误。
您可以做的是将这些值转换为 varchar
,如下所示:
SELECT cast(rhem.idEmpleado AS VARCHAR) FROM rrhh.dbo.Empleado AS rhem
参见demo。
我在 SQL Server 2008 中遇到这个问题。我创建了一个 table 来插入数据,然后用户将能够检查数据是否正确。
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 值,但我已经这样做了,因此用户将能够看到一个临时的 table,其中包含他将插入的所有信息(在大量上传中使用 csv 文件)。问题是,当我使用存储在其他 table 中的原始值检查这些列的值时,出现这些错误。
Msg 245, Level 16, State 1, Line 1 Error de conversión al convertir el valor varchar 'asdf' al tipo de datos smallint.
-
La conversión del valor varchar '234324234' ha desbordado una columna INT2. Utilice 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
您在 IN
return 结果集之后使用的子查询似乎包含整数值,因此当您将 varchar
列(如 idEmpleado
(和其他列)与他们你得到那个错误。
您可以做的是将这些值转换为 varchar
,如下所示:
SELECT cast(rhem.idEmpleado AS VARCHAR) FROM rrhh.dbo.Empleado AS rhem
参见demo。