【发布时间】:2018-07-03 02:51:34
【问题描述】:
其中一个客户端输入的大JSON PAYLOAD。 1000+ JSON PAYLOAD 的 ReceiptID 字段包含“NULL”/“some other word”而不是有效的空白/AlphaNumeric/Numeric。
现在使用以下基于 COALESCE 和 ISNULL 的两个查询来缩小较小的子集。但是,将这些过滤到新的dirtyRowTable 的最佳快速方法是什么,这将有助于要求客户重播相同的内容。
使用以下两个查询来查找包含错误数据的确切行。
--下面的SQL使用ISNULL,返回所有1000行
Select top 1000 EventStoreId,
isnull(JSON_VALUE(payload,'$.ReceiptId'),0) ReceiptId
from dbo.EventStore order by 1 desc
-- 下面的另一个使用 COALESCE 的 SQL,只返回 512 行,并且由于第 513 行的值为“NULL”而出错。 (错误:消息 245,级别 16,状态 1,第 16 行 将 nvarchar 值 'NULL' 转换为数据类型 int 时转换失败。)
Select top 1000 EventStoreId,
COALESCE(JSON_VALUE(payload,'$.ReceiptId'),0) ReceiptId
from dbo.EventStore order by 1 desc
【问题讨论】:
标签: sql sql-server