我尝试了几种不同的方法来搜索解决方案,却找不到我要找的东西。
我需要解析一个nvarchar(max)字段,该字段有141个以逗号分隔的数字。我已经弄明白了。
SET @vData = (SELECT events FROM dbo.eventsTable WHERE eventID = input parameter);
SET @vData - LTRIM(RTRIM(@vData)) + ',';
SET @vpos = CHARINDEX(',', @vData, 1) -- Obtain the starting position of the comma in the string
IF REPLACE(@vData, ',', '') <> ''
BEGIN
WHILE @vpos > 0
BEGIN
SET @vInt = LTRIM(RTRIM(LEFT(@vData, @vpos -1)));
SET @vDataNum = CAST(@vInt AS FLOAT);
IF @vInt <> ''
BEGIN
SET @multiplier = (SELECT multiplier FROM dbo.multiplierTable mt WHERE mt.eventID = input parameter);
SET @vCalcDataNum = @vDataNum * @vmultiplier;
SET @vData = RIGHT(@vData, LEN(@vData) - @vpos);
SET @vpos = CHARINDEX(',', @vData, 1);
END;
END;
它开始成为一个问题的地方是我需要从其他表中提取所有与输入参数相关的其他几个字段,然后显示这些字段以及解析后的数字。我还必须对这些数字进行计算,这就是为什么需要将它们从nvarchar更改为float。
我开始认为我必须将所有这些都写到表格中才能使其发挥作用。我真的不想创建一个超过160列的表。
我有数百万条需要处理的记录。
感谢任何帮助。
其他信息:
基本查询
SELECT t1.field1, t1.field2, t2.field3, t3.field4, t5.field5, t7.field6, t9.field7
FROM dbo.table1 t1
INNER JOIN dbo.table2 t2 ON t2.table1ID = t1.ID
INNER JOIN dbo.table3 t2 ON t3.table2ID = t2.ID
INNER JOIN dbo.table4 t2 ON t4.table3ID = t3.ID
INNER JOIN dbo.table5 t2 ON t5.table4ID = t4.ID
INNER JOIN dbo.table6 t2 ON t6.table5ID = t5.ID
INNER JOIN dbo.table7 t2 ON t7.table6ID = t6.ID
INNER JOIN dbo.table8 t2 ON t8.table7ID = t7.ID
INNER JOIN dbo.table9 t2 ON t9.table8ID = t8.ID
WHERE t3.eventID = input parameter
AND t9.data4 > 0
AND t9.data5 > 1
t9.field7是varchar(max),数据看起来像0,0,0,0,5,0,8,2,0,0,3,2,4,0,4 ....此字段中有141个数字需要解析,然后对它们进行计算。
客户希望输出看起来像:
列标题.....
t1.field1 | t1.field2 | t2.field3 | t3.field4 | t5.field5 | t7.field6 | cpv1 | cpv2 | cpv3 | ...... | cpv141
t1.field1 | t1.field2 | t2.field3 | t3.field4 | t5.field5 | t7.field6 | cpv1 | cpv2 | cpv3 | ...... | cpv141
等
cpv =执行计算后的解析值
我将计算部分添加到上面的循环中,这是我最初的工作。它工作并生成正确的数字,但不是所要求的格式。