2015-04-24 66 views
-1

從我的C#中,我在運行時創建數據表。我想將這個數據表傳遞給存儲過程,以便數據將一起插入到表中。 我使用MySQL作爲數據庫。在SQL-Server中,多個插入的MySQL通過xml等效的是什麼?使用存儲過程在MySQL中批量插入

我生成XML數據集,並傳遞給存儲過程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `RouteLocationVehicleTimeInsert`(

    IN xml VARCHAR(1000000) 
    ) 
BEGIN 
    SET @x=1; 
    SET @val=xml; 
    WHILE @x<=4 DO 
     SET @vehicleId=EXTRACTVALUE(@val, 'NewDataSet/Table1/vehicle_id[[email protected]]'); 
     SET @routeId = EXTRACTVALUE(@val, 'NewDataSet/Table1/route_id[[email protected]]'); 
     SET @locationId = EXTRACTVALUE(@val, 'NewDataSet/Table1/location_id[[email protected]]'); 
     SET @arrivalTime = EXTRACTVALUE(@val, 'NewDataSet/Table1/arrival_time[[email protected]]'); 
    INSERT INTO `rm.routelocation_fm.vehicle_time`(`vehicle_id`,`route_id`,`location_id`,`arrival_time`) 
    VALUES(@vehicleId,@routeId,@locationId,@arrivalTime); 
    SET @[email protected]+1; 
    END WHILE; 
[email protected]@ 

但它並不能幫助。當我測試寫入SP的SQL語句I給出了含多處值在同一列中,像如下

SET @val='<NewDataSet> 
<Table1> 
<vehicle_id>1</vehicle_id> 
<route_id>5</route_id> 
<location_id>1</location_id> 
<arrival_time>00:00</arrival_time> 
</Table1> 
<Table1> 
    <vehicle_id>2</vehicle_id> 
    <route_id>5</route_id> 
    <location_id>2</location_id> 
    <arrival_time>00:00</arrival_time> 
    </Table1></NewDataSet>'; 
SET @x=1; 

     SET @vehicle_id= EXTRACTVALUE(@val, 'NewDataSet/Table1/vehicle_id[1]'); 
     SELECT @vehicle_id; 

它在同一列中給出的結果作爲1 1。他們是兩個記錄。

+0

是的,我設法如下通過以XML格式的數據,SET @ VAL =」 1 00:00 2 00:00 '; SET @ x = 1; SET @locationId = EXTRACTVALUE(@val,'NewDataSet/Table1/location_id [$ @ x]'); SELECT @locationId; – Sangeetha

+0

但是,當我測試這個使用select語句結果越來越「1 2」instaer 1 – Sangeetha

+0

你可以添加到您的原始帖子... – BK435

回答

0

在您的底部示例中,您有<Table1></Table1>塊兩次。和按照定義在XML Functions文檔:

如果找到多個匹配,則第一子文本返回各匹配元件的 節點的內容(在匹配順序),爲 單,空間分隔的字符串。

它返回<Table1>塊中第一個vehicle_id的內容。如果您想從第一個<Table1>開始,請將您的XPath更改爲'NewDataSet/Table1[1]/vehicle_id[1]'

+0

謝謝!它拯救了我的生命。 – Sangeetha

0

您的初始xpath:NewDataSet/Table1/vehicle_id[1]並不真的有幫助,因爲它會從每個Table1父項中返回第一個vehicle_id。由於每個Table1中只有一個vehicle_id,因此xpath不會產生任何影響。

通常,爲了從一個XPath只有第一場比賽,我們內()[1]包住整個XPath的,是這樣的:

(NewDataSet/Table1/vehicle_id)[1] 

不幸的是,上面的XPath語法似乎並不通過MySQL的EXTRACTVALUE()支持。你需要求助於更復雜的東西拿到類似結果:

NewDataSet/Table1[vehicle_id][1]/vehicle_id[1] 

以上的XPath獲得從第一Table1第一vehicle_id有孩子vehicle_id

SQL Fiddle