2013-10-31 23 views
0

我正在創建一個實用程序,它將通常在DBUnit(Java)中發生的事件從XML中插入DB中的記錄。通過XML在數據庫中插入而不知道數據類型

我想知道如何在創建查詢時管理數據類型?例如員工是一張桌子,內部元素是他們的領域。

<Employee> 
    <firstName>Sohail</firstName> 
    <lastName>Hussain</lastName> 
    <salary>100000</salary> 
</Employee> 

在上面的XML中,我無法預測薪水是否是整數或不是?所以,當我創建一個內聯查詢這將是,

Insert into Employee(firstName, lastName, salary) 
values ('Sohail', 'Hussain', '10000') 

在查詢中,你可以看到10000是一個報價,我怎麼能夠不使XML增加了一些更多的標籤,使其複雜的實現這個功能。

回答

0

首先我的問題是你正在使用哪個數據庫?

我不知道你是如何準備的查詢,但分析提供機制在SQL Server

Declare @XmlData XML 

Set XmlData ='<Employee> 
<firstName>Sohail</firstName> 
<lastName>Hussain</lastName> 
<salary>100000</salary> 

Declare @MapData Table (firstname varchar(100),lastname varchar(100),salary int) 

    INSERT INTO @MapData 
    SELECT 
      Tbl.Col.value('firstName[1]', 'varchar(100)'), 
      Tbl.Col.value('lastName[1]', 'varchar(100)'), 
      Tbl.Col.value('salary[1]', 'int') 
    FROM @XmlData.nodes('//Employee') Tbl(Col) 

現在,你必須在@MapData表變量的值,你可以爲你使用要

結果可以看出

  select * from @MapData 

如果解析失敗,會引發錯誤。所以在try catch塊中使用這個解析語句。如果解析失敗,則意味着輸入數據無效。

+0

這不是關於數據庫,我只是使用可能使用SQL Server或其他數據庫的內聯查詢。在這個例子中,你是硬編碼的int,它看起來像在SP中。首先,我只是在C#中使用SQLCommand創建XML內聯查詢(僅供您參考)。 –

+0

你的桌子的模式是什麼?你的表中薪水字段的類型是什麼?您必須在定義模式時作出決定。然後您可以相應地修改插入查詢。沒有定義模式,是否可以將表格切分? –

+0

我試圖執行批量插入,這是比inline插入循環更遠的連擊選項。重置取決於你。 –

相關問題