«Ошибка переполнения Arithmeti c при преобразовании выражения в тип данных nvarchar.» - PullRequest
1 голос
/ 21 февраля 2020

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

WITH SuburbDataTest AS (
  SELECT *
    ,  CAST(Address AS NVARCHAR(100))+' ' +CAST(LivingAddress AS NVARCHAR(2))
    + ' ' + CAST(StartDate AS NVARCHAR(11))+ ' ' +CAST(AddressTypeId AS NVARCHAR(1))
    + ' ' +CAST(SuburbId AS NVARCHAR(1))AS SuburbDataTestColumn
  FROM [mig].[ConsumerAddressMigration]
  WHERE SuburbId is NOT NULL
)
SELECT *
FROM SuburbDataTest staging
WHERE SuburbDataTestColumn IN (
  SELECT Address+' ' +CAST(LivingAddress AS NVARCHAR(2))+ ' '+CAST(StartDate AS NVARCHAR(11))
    + ' ' +CAST(AddressTypeId AS NVARCHAR(1))+ ' ' +CAST(SuburbId AS NVARCHAR(1)) AS SuburbDataTestColumn
  FROM [dbo].[tblConsumerAddress]
)

К сожалению, я получаю

Arithmeti c Ошибка переполнения при преобразовании выражения в тип данных nvarchar.

Есть идеи?

1 Ответ

2 голосов
/ 21 февраля 2020

Это происходит, когда вы конвертируете число в строку, а строка недостаточно велика. Я предполагаю, что это проблема:

CAST(SuburbId AS NVARCHAR(1))

Если SuburbId - это число больше 9, то это приведет к ошибке. Или, в этом случае, если значение отрицательное, вы также получите ту же ошибку.

...