2016-10-25 3 views
-1

Наш текущий проект возвращает текст запроса Http и анализирует его LoadXML. Данные XML считываются путем циклизации через узлы и вставки данных, необходимых по одному. Поскольку у меня есть модификация для этого скрипта, я хотел бы изменить это, используя Bulk Insert. Как я мог напрямую делать объемную вставку, например this, но вместо того, чтобы иметь XML-файл, у меня есть только XML-объект.Массовая вставка в SQL с запросом SOAP

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

Я подозреваю, что у вас должен быть файл на сервере для использования XML-вставки SQL Server. Тем не менее, если вы хотите, чтобы вставить все данные в одном операторе, вы можете рассмотреть вопрос об использовании 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'. –

Смежные вопросы