В задании возникла ошибка
Арифметическая ошибка переполнения при преобразовании выражения в тип данных int. Ниже приведен запрос
DDL таблиц
CREATE TABLE [dbo].[Approvals](
userr_id [int] NOT NULL,
appro_id [int] NOT NULL,
app_units [decimal](9, 2) NOT NULL,
c_units [tinyint] NOT NULL,
usedunits [decimal](9, 2) NOT NULL,
deleted [bit] NOT NULL
)
INSERT INTO approvals
VALUES
(4262, 29, 36.00, 1, 0.00, 0),
(1717, 30, 24.00, 1, 0.00, 0),
(4743, 31, 76.00, 1, 0.00, 0),
(4460, 33, 36.00, 1, 0.00, 0),
(4488, 35, 36.00, 1, 0.00, 0),
(3871, 36, 24.00, 1, 0.00, 0),
(3561, 37, 12.00, 1, 3.00, 0),
(4828, 38, 36.00, 1, 0.00, 0),
(3828, 39, 24.00, 1, 0.00, 0),
(4101, 40, 24.00, 1, 0.00, 0)
CREATE TABLE [dbo].[Visit](
userr_id [int] NULL,
appro_id [int] NULL,
c_secondary [bit] NULL,
auth_exceeded [bit] NOT NULL,
tperiod [int] NOT NULL,
contratrate [decimal](9, 2) NOT NULL
)
INSERT INTO visit
VALUES
(5329, NULL, 0, 0, 419, 0.00),
(4262, NULL, 0, 0, 419, 0.00),
(5244, NULL, 0, 0, 419, 0.00),
(4205, NULL, 0, 0, 419, 0.00),
(4828, NULL, 0, 0, 419, 0.00),
(5531, NULL, 0,0, 419, 0.00),
(5558, NULL, 0, 0, 419, 0.00),
(4460, NULL, 0, 0, 419, 0.00),
(5547, NULL, 0, 0, 419, 0.00),
(5219, NULL, 0, 0, 419, 0.00)
Хранимая процедура:
CREATE PROCEDURE [dbo].[stored_procedure]
AS
DECLARE @userr_id Int, @cnt Int
SET @cnt = 0
DECLARE c CURSOR FOR
SELECT DISTINCT userr_id
FROM (SELECT userr_id, app_units, c_units, usedunits,
(SELECT count(*) FROM Visit WHERE c_secondary = 0 and appro_id = Approvals.appro_id and auth_exceeded = 0) AS count_notexceeded,
(SELECT count(*) FROM Visit WHERE c_secondary = 0 and appro_id = Approvals.appro_id ) AS count_all,
(SELECT SUM(tperiod) / 60.00 FROM Visit WHERE c_secondary = 0 and appro_id = Approvals.appro_id ) AS th_all,
(SELECT SUM(tperiod) / 60.00 FROM Visit WHERE c_secondary = 0 and appro_id = Approvals.appro_id and auth_exceeded = 0) AS th_notexceeded,
(SELECT SUM(contratrate) FROM Visit WHERE c_secondary = 0 and appro_id = Approvals.appro_id and auth_exceeded = 0) AS tr_notexceeded,
(SELECT SUM(contratrate) FROM Visit WHERE c_secondary = 0 and appro_id = Approvals.appro_id ) AS tr_all
FROM Approvals where deleted = 0) t
WHERE ((c_units = 0 and (count_all <> usedunits or count_notexceeded > app_units))
OR (c_units = 2 and (th_all <> usedunits or th_notexceeded > app_units))
OR (c_units = 3 and (tr_all <> usedunits or tr_notexceeded > app_units)))
OPEN c
FETCH NEXT FROM c INTO @userr_id
WHILE @@fetch_status = 0
BEGIN
SET @cnt = @cnt + 1
EXEC [_name_of_another_stored_procedure] @userr_id
FETCH NEXT FROM c INTO @userr_id
END
CLOSE c
DEALLOCATE c
Думаю, это можно исправить, изменив данныетип столбца от INT
до BIGINT
проверка, существует ли столбец со значением, превышающим то, что может содержать столбец типа данных int.
Тем не менее, оно разрешается само;и ошибка не всегда есть в базе данных.
Что бы это могло сделать? Любое возможное объяснение высоко ценится.