Мы конвертируем старую унаследованную программу и интегрируем ее в SSIS. Старая программа выводит файл, который показывает разницу учетной записи для конечных пользователей, которые должны быть уведомлены об изменениях учетной записи. Вот запрос, который я пытаюсь выполнить, чтобы выполнить это, но я получаю ошибку «Преобразование значения varchar '02393224650' переполнило столбец int."Прежде чем сказать «возможный дубликат». Ни один из других постов не отвечает должным образом на этот вопрос и не включает запрос, который реализует логику таким образом.
SELECT
a.run_id,
a.AccountNumber,
a.AccountBranch,
a.AccountName,
a.AccountType,
a.CostCenter,
b.TransactionLimit,
b.ClientName,
b.DailyCumulativeLimit
FROM
AEI_GFXAccounts a
LEFT JOIN AEI_GFXAccountSTP as b
ON
a.feed_id = b.feed_id and
a.run_id = b.run_id and a.GFXAccountsID = b.GFXAccountSTPID),
yest AS (
SELECT * FROM data WHERE run_id = (SELECT MAX(run_id)-1 FROM AEI_GFXAccounts)
),
toda AS (
SELECT * FROM data WHERE run_id = (SELECT MAX(run_id) FROM AEI_GFXAccounts)
)
SELECT
CASE WHEN COALESCE(yest.AccountNumber, 0) <> COALESCE(toda.AccountNumber, 0) THEN yest.AccountNumber END as yest_AccountNumber,
CASE WHEN COALESCE(yest.AccountNumber, 0) <> COALESCE(toda.AccountNumber, 0) THEN toda.AccountNumber END as toda_AccountNumber,
CASE WHEN COALESCE(yest.AccountBranch, 0) <> COALESCE(toda.AccountBranch, 0) THEN yest.AccountBranch END as yest_AccountBranch,
CASE WHEN COALESCE(yest.AccountBranch, 0) <> COALESCE(toda.AccountBranch, 0) THEN toda.AccountBranch END as toda_AccountBranch,
CASE WHEN COALESCE(yest.AccountName, 'x') <> COALESCE(toda.AccountName, 'x') THEN yest.AccountName END as yest_AccountName,
CASE WHEN COALESCE(yest.AccountName, 'x') <> COALESCE(toda.AccountName, 'x') THEN toda.AccountName END as toda_AccountName,
CASE WHEN COALESCE(yest.AccountType, 'n/a') <> COALESCE(toda.AccountType, 'n/a') THEN yest.AccountType END as yest_AccountType,
CASE WHEN COALESCE(yest.AccountType, 'n/a') <> COALESCE(toda.AccountType, 'n/a') THEN toda.AccountType END as toda_AccountType,
CASE WHEN COALESCE(yest.CostCenter, 0) <> COALESCE(toda.CostCenter, 0) THEN yest.CostCenter END as yest_CostCenter,
CASE WHEN COALESCE(yest.CostCenter, 0) <> COALESCE(toda.CostCenter, 0) THEN toda.CostCenter END as toda_CostCenter,
CASE WHEN COALESCE(yest.TransactionLimit, 0) <> COALESCE(toda.TransactionLimit, 0) THEN yest.TransactionLimit END as yest_TransactionLimit,
CASE WHEN COALESCE(yest.TransactionLimit, 0) <> COALESCE(toda.TransactionLimit, 0) THEN toda.TransactionLimit END as toda_TransactionLimit,
CASE WHEN COALESCE(yest.ClientName, 'x') <> COALESCE(toda.ClientName, 'x') THEN yest.ClientName END as yest_ClientName,
CASE WHEN COALESCE(yest.ClientName, 'x') <> COALESCE(toda.ClientName, 'x') THEN toda.ClientName END as toda_ClientName,
CASE WHEN COALESCE(yest.DailyCumulativeLimit, 0) <> COALESCE(toda.DailyCumulativeLimit, 0) THEN yest.DailyCumulativeLimit END as yest_DailyCumulativeLimit,
CASE WHEN COALESCE(yest.DailyCumulativeLimit, 0) <> COALESCE(toda.DailyCumulativeLimit, 0) THEN toda.DailyCumulativeLimit END as toda_DailyCumulativeLimit
FROM
toda LEFT JOIN yest ON toda.accountNumber = yest.AccountNumber
WHERE
COALESCE(toda.AccountNumber, 0) <> COALESCE(yest.AccountNumber, 0) OR
COALESCE(toda.AccountBranch, 0) <> COALESCE(yest.AccountBranch, 0) OR
COALESCE(toda.AccountName, 'x') <> COALESCE(yest.AccountName, 'x') OR
COALESCE(toda.AccountType, 'n/a') <> COALESCE(yest.AccountType, 'n/a') OR
COALESCE(toda.CostCenter, 0) <> COALESCE(yest.CostCenter, 0) OR
COALESCE(toda.TransactionLimit, 0) <> COALESCE(yest.TransactionLimit, 0) OR
COALESCE(toda.ClientName, 'x') <> COALESCE(yest.ClientName, 'x') OR
COALESCE(toda.DailyCumulativeLimit, 0) <> COALESCE(yest.DailyCumulativeLimit, 0)
SELECT
a.run_id,
a.AccountNumber,
a.AccountBranch,
a.AccountName,
a.AccountType,
a.CostCenter,
b.TransactionLimit,
b.ClientName,
b.DailyCumulativeLimit
FROM
AEI_GFXAccounts a
LEFT JOIN AEI_GFXAccountSTP as b
ON
a.feed_id = b.feed_id and
a.run_id = b.run_id and a.GFXAccountsID = b.GFXAccountSTPID
Я ожидаю, что он выдаст результат просмотра / запроса, который отображает ТОЛЬКО все учетные записи, которые были изменены. С полями, которые не являются реивилиантными для заполнения данными нет данных. Но вместо этого я получаю сообщение об ошибке:
Сообщение 248, Уровень 16, Состояние 1, Строка 5
Преобразование значения varchar '02393224650' переполнило столбец int.
Это не имеет смысла для меня, потому что таблица уже поддерживает номера int этого тома, которые уже хранятся в таблице.