sql - 检测昨天负载和今天负载之间差异但填充错误的查询
问题描述
我们正在转换旧的遗留程序并将其集成到 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
我希望它返回一个仅显示所有已更改帐户的视图/查询结果。使用不依赖于填充 n/a 数据的字段。但我却得到了错误:
消息 248,第 16 层,状态 1,第 5 行
varchar 值 '02393224650' 的转换溢出了一个 int 列。
这对我来说没有意义,因为该表已经支持已经存储在表中的该卷的 int 数。
解决方案
我找到了答案。问题是该表的设计数据类型实际上是一个 VarChar。COALESCE 正在尝试输入一个 int。当它最终是一个varchar时。
推荐阅读
- python - 在 Python 环境中,Selenium 的滚动任务不适用于我
- java - VMM 如何查找或获取 VMM 实体属性映射/属性名称
- python - 如何在 Raspberry 上安装 AWS CLI?
- arduino - 在其他板上(UNO、Nano 等)使用 Keyboard.h lib 编译 Arduino 代码
- python - 如何在 cython 中处理任意大的数字?
- ibm-mq - 从队列到 Web 服务 IBM ace 的消息流
- html - 复选框的复合标签
- haskell - 如何在 Haskell 中使用 Gloss 和 JuicyPixels 绘制图像?
- vba - 如何重命名变量(循环填充多个矩阵)
- python - 如何使用python将抓取数据保存在mysql中