2016-10-25 39 views
-1

我们目前的设计是获取Http请求文本并通过LoadXML解析它。正在通过循环读取XML数据并逐个插入所需的数据。由于我对该脚本进行了修改,因此我想使用批量插入对其进行修改。我怎么能直接做一个批量插入像this,而不是有一个XML文件,我只有一个XML对象。从SOAP请求批量插入SQL

Set http_request = CreateObject("MSXML2.XMLHTTP") 
http_request.open "POST", url, vbfalse 
http_request.setRequestHeader "AUTHORIZATION", "Basic " & AuthInfo 
http_request.setRequestHeader "Content-type", "application/soap+xml" 
http_request.setRequestHeader "Content-length", Len(parameters) 
http_request.setRequestHeader "Connection", "close" 
http_request.send parameters 
httpText = http_request.responseText 

Set xmlDoc = CreateObject("MSXML2.DOMDocument") 
xmlDoc.async = False 
xmlDoc.LoadXML httpText 

Set objDict = CreateObject("Scripting.Dictionary") 

set Nodes=xmlDoc.selectNodes("//getRecordsResponse/getRecordsResult") 

For Each node in Nodes 
    *****Insert TO SQL***** 
Next 
+0

请包括一些代码,显示您如何获取和解析XML,以及之后您正在做什么。正如你的问题所展示的那样,你甚至不清楚你想在什么环境下做到这一点。 –

+0

我已经包含了我的VBscript代码,不包括不重要的变量。 – Sid

回答

1

我怀疑您必须在服务器上有一个文件才能使用SQL Server的XML批量插入。但是,如果要插入在单个语句中的所有数据,你可能要考虑使用INSERT INTO ... VALUES

INSERT INTO DestinationTable 
VALUES (
    ('Row1_Value1', 'Row1_Value2'), 
    ('Row2_Value1', 'Row2_Value2') 
) 

树立值列表中For Each循环。类似这样的:

'probably needs to check each node if it is also an element 
Dim length = xmlDoc.childNodes.Length 
Dim rows(length), i, node 
For i = 0 To length 
    Set node = xmlDoc.childNodes(i) 
    rows(i) = Array(node.getAttribute("Value1"), node.getAttribute("Value2")) 
    rows(i) = "('" & Join(rows(i), "','") & "')" 

    'It might be simpler to just build the string directly, instead of Array/Join 
Next 

Dim sql 
sql = "INSERT INTO DestinationTable VALUES (" & Join(rows, ",") & ")" 
+0

如果没有其他方法,我正在考虑该文件。 Insert语句是个好主意,你知道我可以追加多少个字符的限制。 SQLstring将附加我从循环中获得的值。 – Sid

+0

@Sid [这可能是一个有效的担忧](http://stackoverflow.com/questions/9201354/how-many-characters-long-may-an-sql-server-sql-statement-be)。但是默认值似乎是'65,536 * 4KB'。 –