在存储过程中使用 delimited8ksplit 填充临时表时丢失一半数据

问题描述

我正在使用 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 (将#修改为@)