显式字段声明与循环(VBScript到SQL插入

时间:2016-02-15 22:17:23

标签: sql sql-server vbscript type-conversion

我有一个关于简化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

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

我的长代码包含了类似的内容     清理(​​1)&amp; &#34;&#34; &安培;清理(​​2)&amp; &#34;&#34; &#39;&#39;等等 显然,我在尝试循环时做错了 - 由于数据类型不匹配,我感到很难过。

非常感谢对这个问题的任何见解。我喜欢有一个有效的代码,而且我对VBScript和SQL之间的数据类型交换一般感到好奇。我一般在变体类型和SQL类型上找到了一些优秀的资源,但没有解决交换的问题。

示例转储值:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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', '', '', '')