问题描述
我正在使用 delimitedSplit8k 函数来拆分由外部系统导出的 CSV 字符串,然后将其存储在临时表中以供进一步处理。我知道 CSV 并不理想,但这是外部系统提供数据的方式。 当我在 SSMS 中手动运行我的代码时,我得到了预期的 17,049 行。当我在存储过程中调用相同的代码时,我只得到 8,000 行。我曾尝试使用表变量、正确的表,并尝试使用“select into”而不是“insert into”,但无法弄清楚我“丢失”记录的原因。没有错误消息。它是 sql Server 2008。我让一位同事检查了我的代码和我的测试 - 他验证了我得到的结果,但无法提供任何解决方案。 已经玩了几天,在这个论坛和其他论坛上阅读了很多很多帖子,但没有找到解决方案。
我当前的代码是:
-- Table to hold split values
IF (OBJECT_ID('tempdb..#Temp_SplitValues') IS NOT NULL)
DROP TABLE #Temp_SplitValues;
CREATE TABLE #Temp_SplitValues
(
[RecordNo] [bigint] NULL,[ItemNo] [Bigint] NULL,[ItemValue] [varchar](500) NULL
);
INSERT INTO #Temp_SplitValues
SELECT Lines.Record_ID,split.ItemNumber,split.item
FROM Temp_ResponseLines Lines
CROSS APPLY dbo.DelimitedSplit8k(Lines.ResponseLine,',') split;
SELECT RecordNo,ItemNo,ItemValue
FROM #Temp_SplitValues;
输入表 Temp_ResponseLines
有 2 列 [Record_ID]
& [ResponseLine]
。 Record_ID
是一个 bigint 标识列,ResponseLine
包含要拆分的 CSV 字符串。响应行包含 39 个字段 - 目前,有几行有一个额外的逗号需要清理,这就是为什么拆分表中的记录数不是 39 的精确倍数。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)