Ошибка арифметического переполнения при преобразовании varchar в числовой тип данных при совместной работе - PullRequest
0 голосов
/ 07 ноября 2019

Я получаю ошибку арифметического переполнения. Когда я запускаю их по одному, все работает нормально, но когда они оба запускаются, я получаю ошибку. UNITCNT1, к сожалению, является типом данных «текст». Любые идеи о том, почему они работают отдельно, но не вместе? Использование SQL Server. Спасибо.

SELECT 
    CASE 
       WHEN CAST(UNITCNT1 AS VARCHAR(MAX)) = .00 
          THEN 'ALL AGES' 
          ELSE '' 
    END AS AGE_CAT,
    CASE 
       WHEN CAST(UNITCNT1 AS VARCHAR(MAX)) >= 18.00 
          THEN 'ADULT' 
          ELSE '' 
    END AS AGE_CAT1
FROM 
    UNITS

1 Ответ

0 голосов
/ 07 ноября 2019

это работает правильно, потому что вы используете оператор равенства, и вы можете изменить свой запрос следующим образом:

DECLARE @UNITS TABLE
    (
      UNITCNT1 VARCHAR(MAX)
    )

    insert into @UNITS values(12)

    SELECT 
    CASE WHEN CAST(UNITCNT1 AS VARCHAR(MAX)) = '.00' THEN 'ALL AGES' ELSE '' END AS AGE_CAT 
    ,CASE WHEN CAST(UNITCNT1 AS VARCHAR(MAX)) >= 18.00 THEN 'ADULT' ELSE '' END AS AGE_CAT1
    FROM @UNITS

Я думаю, лучше использовать десятичный формат для числового столбца, например:

    DECLARE @UNITS TABLE
    (
      UNITCNT1 VARCHAR(MAX) -- or decimal type i dont know your schema
    )

    insert into @UNITS values(12)

    SELECT 
    CASE WHEN CAST(UNITCNT1 AS decimal) = .00 THEN 'ALL AGES' ELSE '' END AS AGE_CAT 
    ,CASE WHEN CAST(UNITCNT1 AS decimal) >= 18.00 THEN 'ADULT' ELSE '' END AS AGE_CAT1
    FROM @UNITS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...