【问题标题】:Explicit Field Declaration Vs Loop (VBScript to SQL Insert显式字段声明与循环(VBScript 到 SQL 插入
【发布时间】:2016-02-15 22:17:23
【问题描述】:

我有一个关于简化 VBScript/SQL 代码的基本问题。我有一个工作脚本,它从一个表中提取数据,通过分隔符“|”对其进行解析,然后将其重新插入到第二个 254 列表中。在这样做的过程中,我明确地为插入写出每个字段,为值写出数组的每个部分。显然,这不是很有效。为了简化这一点,我一直在尝试遍历数组,插入结果行,然后移动到下一行,如下所示:

'assume declaration of recordset, SQL connection, pull from first table, ect.
if recordset.EOF then
wscript.echo "No new records found."
else 

Do While NOT Recordset.EOF
dump = recordset("data")
if dump <> "" then
dump = Replace(dump,"'","")
cleanup=split(field,"|")

if instr(cleanup(0),"RECORD") then
for i = 1 to 254
cleanup(i)= cleanup(i) & "','"
i= i + 1
next

end if

strRecsql="INSERT INTO records_fields VALUES ('" & cleanup & "')"
connection.execute strRecsql

现在,当我明确说明所有字段和值时,我解决了所有数据类型不匹配问题。现在我正在循环,我得到了数据类型不匹配错误,我认为(总是危险的)意味着脚本正在到达插入点并且失败。

我的长代码包括诸如 cleanup(1) & "," & cleanup(2) & "," ''等等 显然,我在尝试循环时做错了——我只是因为数据类型不匹配而被难住了。

非常感谢您对此问题的任何见解。我很想有一个有效且有效的代码,我只是对 VBScript 和 SQL 之间的数据类型交换感到好奇。我发现了一些关于变体类型和一般 SQL 类型的优秀资源,但没有解决交换的问题。

样本转储值:

“记录|2-10-15 00:00:00|SMITH|JOHN|+14.59|订书钉||||||AE15679|j2700|||办公用品|||”

【问题讨论】:

  • Mysql 和 sql server 是两个不同的产品。你用的是哪一个?
  • cleanup 变量是一个数组。您不能简单地将数组与字符串连接起来。您需要使用 join() 函数将数组展平为字符串。
  • 你能举一个dump值的例子吗?
  • @Shadow -- 抱歉,这里有错误标记。我绝对不需要通过混合代码来搅浑水。谢谢你的提示!它至少让我走上了正确的轨道。我现在在那里加入,但我似乎遇到了另一面墙,字符串超出范围。我想我之前没有处理过这个问题,因为我将数组的每个部分单独编码成一个字符串?只是想解决这个问题。再次感谢!
  • @Susilo -- 一个典型的dump 值如下所示:"RECORD|2-10-15 00:00:00|SMITH|JOHN|+14.59|STAPLES| | | | | | AE15679|j2700| | |办公用品| | |" ... 以此类推,共 254 列。其中很多是空的,当我手动写出整个数组输入时,这实际上并没有给我带来问题。

标签: sql sql-server vbscript type-conversion


【解决方案1】:

好的,因为你没有回复我最后的评论,所以我必须做出很多假设,并主要根据样本值做出这个答案

记录|2-10-15 00:00:00|史密斯|约翰|+14.59|订书钉| | | | | |AE15679|j2700| | |办公用品| | |

基于该示例,结果表明您不需要 splitdump 值,因为直接将 | 替换为 ', ' 将解决问题。我在下面的答案是简化的,所以不会显示所有代码,只显示需要的一部分

dump = "RECORD|2-10-15 00:00:00|SMITH|JOHN|+14.59|STAPLES|" & 
       "| | | | |AE15679|j2700| | |Office supplies| | |"

maxLen = 1000

if Left(dump, 7) = "RECORD|" then
    dump = "INSERT INTO records_fields VALUES ('" & 
           Replace(Mid(dump, 8, maxLen), "|","', '") & "')"

    dump = Replace(dump, "' '", "''") ' Replace ' ' with '' if needed.'
    dump = Replace(dump, "''''", "''") ' Replace '''' with '' if needed.'
end if

MsgBox dump

输出:

INSERT INTO records_fields VALUES ('2-10-15 00:00:00', 'SMITH', 'JOHN', '+14.59', 'STAPLES', '', '', '', '', '', 'AE15679', 'j2700', '', '', 'Office supplies', '', '', '')

【讨论】:

  • 很抱歉没有尽快回复,但您对dump 位置的假设是绝对正确的。把整个东西变成一个字符串正是我需要的桥梁——一旦我把它放进去,我意识到这个数组并不是真的需要。再一次,我把事情弄得太复杂了。非常感谢您为我澄清差异。我非常感谢您的时间和专业知识!
猜你喜欢
  • 2021-07-03
  • 2014-06-15
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多