Click here to Skip to main content
15,896,269 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
This is my xml file data : name=newxf.xml

HTML
<newdataset>
  <lrtest>
    <lr_no>12807</lr_no>
    <bkg_stn>CHATRAL</bkg_stn>
    <frmshort>CTR</frmshort>
  </lrtest>
  <lrtest>
    <lr_no>12808</lr_no>
    <bkg_stn>CHATRAL</bkg_stn>
    <frmshort>CTR</frmshort>
  </lrtest>
  <lrtest>
    <lr_no>12811</lr_no>
    <bkg_stn>CHATRAL</bkg_stn>
    <frmshort>CTR</frmshort>
  </lrtest>
<lrtest>
    <lr_no>13466</lr_no>
    <bkg_stn>VATVA</bkg_stn>
    <frmshort>VAT</frmshort>
  </lrtest>
</newdataset>



I created the below said table:

SQL
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[IExml](
	[Lr_no] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[Bkg_Stn] [varchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[FrmShort] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

===========================
And i am running this query to bulk load xml file into
my sql server table.

SQL
use master
DECLARE @TESTPB TABLE (Lr_no Varchar (50), Bkg_Stn Varchar(30) , FrmShort Varchar(5))
DECLARE @xml XML;
SELECT @xml = (
	SELECT * FROM OPENROWSET(
	BULK 'D:\newxf.xml',
	SINGLE_BLOB) x)
INSERT INTO @TestPB(LR_no,Bkg_Stn,FrmShort)
SELECT  X.product.value('LR_no[1]', 'Varchar(50)'),
		X.product.value('Bkg_Stn[1]', 'Varchar(30)'),
		X.product.value('FrmShort[1]', 'Varchar(5)')
FROM
@xml.nodes('NewDataSet/LRTest') AS X(product);
INSERT INTO Master.dbo.IExml
Select * From @TestPB

==============================

And Result is :

Lr_no Bkg_Stn FrmShort
NULL CHATRAL CTR
NULL CHATRAL CTR
NULL CHATRAL CTR
NULL SARKHEJ SRK
NULL SARKHEJ SRK
NULL SARKHEJ SRK
NULL VATVA VAT
NULL SARKHEJ SRK

The problem is when i am execute above said query i get the msg. com complt sucfully.
But LR_No Column data is not inserting....

The Lr_no column conatained numerical data , is should be look like :
Lr_no Bkg_Stn FrmShort
123456 CHATRAL CTR
123457 CHATRAL CTR
123458 CHATRAL CTR
123459 SARKHEJ SRK
123451 SARKHEJ SRK
123452 SARKHEJ SRK

Please let me know where i am going wrong. its urgent.. pls..... help me...
Posted
Updated 31-Jan-12 0:18am
v5
Comments
Herman<T>.Instance 31-Jan-12 6:08am    
somehow the integer value of 12811 is not inserted.
SqlBulkCopy command (bcp) might be useful to use
gufran90 31-Jan-12 6:24am    
Thx for Reply @digimanus

But can u give me a example for bcp
for the abouve said code :
Herman<T>.Instance 31-Jan-12 6:49am    
http://msdn.microsoft.com/en-us/library/ms188365.aspx
http://msdn.microsoft.com/en-us/library/ms162802.aspx

1 solution

XML parsing is case sensitive process

Please make sure that you are using this call as per your XML shared above

SQL
SELECT  X.product.value('lr_no[1]', 'Varchar(50)'),
        X.product.value('bkg_stn[1]', 'Varchar(30)'),
        X.product.value('frmshort[1]', 'Varchar(5)')
FROM
@xml.nodes('newdataset/lrtest') AS X(product);



Please look for the "LR_no[1]" to "lr_no[1]" case changes.
 
Share this answer
 
Comments
gufran90 1-Feb-12 9:35am    
Thx for help Mr.Rahul , u r right when i change case its running ok,
Now if run the same query with more columns

Insert into Master.dbo.TrnBal (LR_No,LR_Date,Bkg_Stn,FrmShort,Dst,ToShort,Consignor_Name,Consignee_Name,Pvt_Mark,Discription,Article,Weight,Value,Pmt_Mode,DoorDel,LR_Remark,Freight,BC,Handling,DDel,LC,Others,
S_Tax,Amount,Initial,Report_No,Rep_Date)
Select XmlQuery.query('LR_No[1]').value('.', 'Varchar(50)'),
XmlQuery.query('LR_Date[1]').value('.', 'smalldatetime'),
XmlQuery.query('Bkg_Stn[1]').value('.', 'Varchar(30)'),
XmlQuery.query('FrmShort[1]').value('.', 'Varchar(5)'),
XmlQuery.query('Dst[1]').value('.', 'Varchar(30)'),
XmlQuery.query('ToShort[1]').value('.', 'Varchar(5)'),
XmlQuery.query('Consignor_Name[1]').value('.', 'Varchar(30)'),
XmlQuery.query('Consignee_Name[1]').value('.', 'Varchar(30)'),
XmlQuery.query('Pvt_Mark[1]').value('.', 'varchar(20)'),
XmlQuery.query('Discription[1]').value('.', 'varchar(20)'),
XmlQuery.query('Article[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Weight[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Value[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Pmt_Mode[1]').value('.', 'varchar(10)'),
XmlQuery.query('DoorDel[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('LR_Remark[1]').value('.', 'varchar(50)'),
XmlQuery.query('Freight[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('BC[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Handling[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('DDel[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('LC[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Others[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('S_Tax[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Amount[1]').value('.', 'decimal(18,0)'),
XmlQuery.query('Initial[1]').value('.', 'varchar(15)'),
XmlQuery.query('Report_No[1]').value('.', 'int'),
XmlQuery.query('Rep_Date[1]').value('.', 'smalldatetime')
FROM (
SELECT CAST(XmlQuery AS XML)
FROM OPENROWSET(
BULK 'D:\fxmlf.xml',
SINGLE_BLOB) AS T(XmlQuery)
) AS T(XmlQuery)
CROSS APPLY XmlQuery.nodes('NewDataSet/LRTest') AS XmlQuery(Trnbal);
its giving me error : Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to numeric.

can u pls. guide me where i am going wrong
RDBurmon 1-Feb-12 9:42am    
Could you please give me below information
1) table structure of "TrnBal" table.
2) XML data in D:\fxmlf.xm file.
RDBurmon 1-Feb-12 9:58am    
Try this

Insert into TrnBal (LR_No,LR_Date,Bkg_Stn,FrmShort,Dst,ToShort,Consignor_Name,Consignee_Name,Pvt_Mark,Discription,Article,Weight,Value,Pmt_Mode,DoorDel,LR_Remark,Freight,BC,Handling,DDel,LC,Others,
S_Tax,Amount,Initial,Report_No,Rep_Date)
Select XmlQuery.query('LR_No[1]').value('.', 'Varchar(50)'),
XmlQuery.query('LR_Date[1]').value('.', 'smalldatetime'),
XmlQuery.query('Bkg_Stn[1]').value('.', 'Varchar(30)'),
XmlQuery.query('FrmShort[1]').value('.', 'Varchar(5)'),
XmlQuery.query('Dst[1]').value('.', 'Varchar(30)'),
XmlQuery.query('ToShort[1]').value('.', 'Varchar(5)'),
XmlQuery.query('Consignor_Name[1]').value('.', 'Varchar(30)'),
XmlQuery.query('Consignee_Name[1]').value('.', 'Varchar(30)'),
XmlQuery.query('Pvt_Mark[1]').value('.', 'varchar(20)'),
XmlQuery.query('Discription[1]').value('.', 'varchar(20)'),
XmlQuery.query('Article[1]').value('0', 'decimal(18,0)'),
XmlQuery.query('Weight[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Value[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Pmt_Mode[1]').value('.', 'varchar(10)'),
XmlQuery.query('DoorDel[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('LR_Remark[1]').value('.', 'varchar(50)'),
XmlQuery.query('Freight[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('BC[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Handling[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('DDel[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('LC[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Others[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('S_Tax[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Amount[1]').value('0.0', 'decimal(18,0)'),
XmlQuery.query('Initial[1]').value('.', 'varchar(15)'),
XmlQuery.query('Report_No[1]').value('0', 'int'),
XmlQuery.query('Rep_Date[1]').value('.', 'smalldatetime')
FROM (
SELECT CAST(XmlQuery AS XML)
FROM OPENROWSET(
BULK 'D:\fxmlf.xml',
SINGLE_BLOB) AS T(XmlQuery)
) AS T(XmlQuery)
CROSS APPLY XmlQuery.nodes('NewDataSet/LRTest') AS XmlQuery(Trnbal);
RDBurmon 1-Feb-12 9:59am    
Please note I have replaced "('.', 'decimal" with "('0.0', 'decimal" and "'.', 'int'" with "'0', 'int''

Hope this helps or else revert back with your queries
--Rahul D.
gufran90 2-Feb-12 6:05am    
Thx for replying me Mr.RAHUL

Actually the problem is in smalldatetime column , Now, i am giving
you a total information of my query please take a look below.

Here is my finel query : works fine all the way... thx for your help...

Now i am posting my finel query which i want run through vb.net 2008 :
what i want to do is User Just input the xml File Name and on Button event
i want to run this query.
can u guide me in this please

USE MASTER
Go
DECLARE @CD TABLE (XMLData XML);
INSERT INTO @CD
SELECT *
FROM OPENROWSET(BULK N'D:\fxmlcon.xml', SINGLE_BLOB) rs;

INSERT INTO Master.dbo.TrnBal (LR_no, LR_Date, Bkg_Stn, FrmShort, Dst, ToShort, Consignor_Name, Consignee_Name, Pvt_Mark, Discription, Article,
Weight,Value,Pmt_Mode,DoorDel,LR_Remark,Freight,BC,Handling,DDel,LC,Others,S_Tax,Amount,Initial,Report_No,Rep_Date)

SELECT LR_No = x.data.value('LR_No[1]', 'int'),
LR_Date = x.data.value('LR_Date[1]', 'Varchar(50)'),
Bkg_Stn = x.data.value('Bkg_Stn[1]', 'Varchar(30)'),
FrmShort = x.data.value('FrmShort[1]', 'Varchar(5)'),
Dst = x.data.value('Dst[1]', 'Varchar(30)'),
ToShort = x.data.value('ToShort[1]', 'Varchar(5)'),
Consignor_Name = x.data.value('Consignor_Name[1]', 'Varchar(30)'),
Consignee_Name = x.data.value('Consignee_Name[1]', 'Varchar(30)'),
Pvt_Mark = x.data.value('Pvt_Mark[1]', 'Varchar(20)'),
Discription = x.data.value('Discription[1]', 'Varchar(20)'),
Article = x.data.value('Article[1]', 'decimal(18,0)'),
Weight = x.data.value('Weight[1]', 'decimal(18,0)'),
Value= x.data.value('Value[1]', 'decimal(18,0)'),
Pmt_Mode = x.data.value('Pmt_Mode[1]', 'Varchar(5)'),
DoorDel = x.data.value('DoorDel[1]', 'Varchar(5)'),
LR_Remark = x.data.value('LR_Remark[1]', 'Varchar(50)'),
Freight = x.data.value('Freight[1]', 'decimal(18,0)'),
BC = x.data.value('BC[1]', 'decimal(18,0)'),
Handling = x.data.value('Handling[1]', 'decimal(18,0)'),
DDel = x.data.value('DDel[1]', 'decimal(18,0)'),
LC = x.data.value('LC[1]', 'decimal(18,0)'),
Others = x.data.value('Others[1]', 'decimal(18,0)'),
S_Tax = x.data.value('S_Tax[1]', 'decimal(18,0)'),
Amount = x.data.value('Amount[1]', 'decimal(18,0)'),
Initial = x.data.value('Initial[1]', 'Varchar(15)'),
Report_No = x.data.value('Report_No[1]', 'int'),
Rep_Date = x.data.value('Rep_Date[1]', 'smalldatetime')
FROM @CD t
CROSS APPLY t.XMLData.nodes('NewDataSet/LRTest') x(data);
SELECT * From dbo.Trnbal;

THX in advance Mr.RAHUL

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900