Insert customized bulk data into sql datatable.http://forums.asp.net/t/1584229.aspx/1?Insert+customized+bulk+data+into+sql+datatable+Fri, 30 Jul 2010 12:29:38 -040015842293999608http://forums.asp.net/p/1584229/3999608.aspx/1?Insert+customized+bulk+data+into+sql+datatable+Insert customized bulk data into sql datatable. <p>Hi All,</p> <p>What I am trying to achieve here is, I am supplying xml as string (varchar) to my stored procedure, In stored procedure I want to parse this xml and fetch each Promotion record and insert into my table. Also once each record is inserted, I need to fetch the Identity of that record alongwith the AreaID attribute from the Parent node &quot;Promotion&quot; of each Promotion record and insert into second association table. Please guide how would I go about doing it, my generated xml is given as under.</p> <p><pre class="prettyprint">&lt;PromoData&gt; &lt;Promotion AreaID=&quot;1&quot;&gt; &lt;PromoName&gt;Rest &amp; Relaxation Sale&lt;/PromoName&gt; &lt;PromoDesc&gt;Rest &amp; Relaxation Sale&lt;/PromoDesc&gt;&lt;PromoCode&gt;SYSPROM197&lt;/PromoCode&gt; &lt;BeginDate&gt;01/21/2010&lt;/BeginDate&gt; &lt;EndDate&gt;01/23/2010&lt;/EndDate&gt; &lt;RawHtml&gt;&lt;h4&gt;Hi&lt;/h4&gt;&lt;/RawHtml&gt; &lt;FocusPromoInd&gt;1&lt;/FocusPromoInd&gt; &lt;FocusPromoCode&gt;&lt;/FocusPromoCode&gt; &lt;ActiveInd&gt;1&lt;/ActiveInd&gt; &lt;/Promotion&gt; &lt;Promotion AreaID=&quot;2&quot;&gt; &lt;PromoName&gt;Rest &amp; Relaxation Sale&lt;/PromoName&gt; &lt;PromoDesc&gt;&lt;/PromoDesc&gt; &lt;PromoCode&gt;&lt;/PromoCode&gt; &lt;BeginDate&gt;01/21/2010&lt;/BeginDate&gt; &lt;EndDate&gt;01/23/2010&lt;/EndDate&gt; &lt;RawHtml&gt;&lt;h4&gt;Hi&lt;/h4&gt;&lt;/RawHtml&gt; &lt;FocusPromoInd&gt;0&lt;/FocusPromoInd&gt; &lt;FocusPromoCode&gt;SYSPROM197&lt;/FocusPromoCode&gt; &lt;ActiveInd&gt;1&lt;/ActiveInd&gt; &lt;/Promotion&gt; &lt;Promotion AreaID=&quot;3&quot;&gt; &lt;PromoName&gt;Rest &amp; Relaxation Sale&lt;/PromoName&gt; &lt;PromoDesc&gt;&lt;/PromoDesc&gt; &lt;PromoCode&gt;&lt;/PromoCode&gt; &lt;BeginDate&gt;01/21/2010&lt;/BeginDate&gt; &lt;EndDate&gt;01/23/2010&lt;/EndDate&gt; &lt;RawHtml&gt;&lt;h4&gt;Hi&lt;/h4&gt;&lt;/RawHtml&gt; &lt;FocusPromoInd&gt;0&lt;/FocusPromoInd&gt; &lt;FocusPromoCode&gt;SYSPROM197&lt;/FocusPromoCode&gt; &lt;ActiveInd&gt;1&lt;/ActiveInd&gt; &lt;/Promotion&gt; &lt;/PromoData&gt;</pre><br> I would appreciate any help, Thanks!<br> </p> 2010-07-29T15:20:27-04:003999749http://forums.asp.net/p/1584229/3999749.aspx/1?Re+Insert+customized+bulk+data+into+sql+datatable+Re: Insert customized bulk data into sql datatable. <p>Hi,</p> <p>You can use OpenXml. Please refer following</p> <p><a target="_self" href="http://msdn.microsoft.com/en-us/library/aa276847%28SQL.80%29.aspx">http://msdn.microsoft.com/en-us/library/aa276847%28SQL.80%29.aspx</a><br> </p> <p><a target="_self" href="http://weblogs.asp.net/jgalloway/archive/2007/02/16/passing-lists-to-sql-server-2005-with-xml-parameters.aspx">http://weblogs.asp.net/jgalloway/archive/2007/02/16/passing-lists-to-sql-server-2005-with-xml-parameters.aspx</a><br> </p> <p><a target="_self" href="http://weblogs.asp.net/guys/archive/2004/12/21/328214.aspx">http://weblogs.asp.net/guys/archive/2004/12/21/328214.aspx</a><br> </p> <p><a target="_self" href="/t/1525817.aspx">http://forums.asp.net/t/1525817.aspx</a></p> <p>hope this helps<br> </p> 2010-07-29T16:29:16-04:004001272http://forums.asp.net/p/1584229/4001272.aspx/1?Re+Insert+customized+bulk+data+into+sql+datatable+Re: Insert customized bulk data into sql datatable. <p>Hi Ketan,</p> <p>Thanks for the articles, that helped me volumes writing the whole procedure from scratch. I have been able to fetch and read xml and insert data into my table. The only problem I seem to be facing is, how what modification should I make to read the AreaID which is passed as an attribute of promotion anchor. I have tried passing flags 0/8 but to no avail. 2 works fins as far as I am reading elements.</p> <p>Here is the chuck of my sproc.</p> <p><pre class="prettyprint">DECLARE @XmlDocID int, @RecordCount int, @CurrentRecord int, @IsDebug bit DECLARE @Promotion TABLE (PromoID int NOT NULL IDENTITY (1,1), PromoName nvarchar(max) NOT NULL, PromoDesc nvarchar(max) NULL, PromoCode varchar(10) NOT NULL, BeginDate datetime NOT NULL, EndDate datetime NOT NULL, CreatedDate datetime NOT NULL, RawHtml nvarchar(max) NOT NULL, FocusPromoInd bit NOT NULL, FocusPromoCode varchar(10) NULL, ActiveInd bit NOT NULL, AreaID int NOT NULL ) SET @IsDebug = 1 set @XmlPromoDoc = ' &lt;PromoData&gt; &lt;Promotion AreaID=&quot;1&quot;&gt; &lt;PromoName&gt;Friends &amp; Family Event&lt;/PromoName&gt; &lt;PromoDesc&gt;Friends &amp; Family Event&lt;/PromoDesc&gt; &lt;PromoCode&gt;SYSPROM217&lt;/PromoCode&gt; &lt;BeginDate&gt;05/01/2010&lt;/BeginDate&gt; &lt;EndDate&gt;05/02/2010&lt;/EndDate&gt; &lt;RawHtml&gt;&lt;h4&gt;Hi&lt;/h4&gt;&lt;/RawHtml&gt; &lt;FocusPromoInd&gt;1&lt;/FocusPromoInd&gt; &lt;FocusPromoCode&gt;&lt;/FocusPromoCode&gt; &lt;ActiveInd&gt;1&lt;/ActiveInd&gt; &lt;/Promotion&gt;&lt;Promotion AreaID=&quot;2&quot;&gt; &lt;PromoName&gt;Friends &amp; Family Event&lt;/PromoName&gt; &lt;PromoDesc&gt;&lt;/PromoDesc&gt; &lt;PromoCode&gt;&lt;/PromoCode&gt; &lt;BeginDate&gt;05/01/2010&lt;/BeginDate&gt; &lt;EndDate&gt;05/02/2010&lt;/EndDate&gt; &lt;RawHtml&gt;&lt;h4&gt;Hi&lt;/h4&gt;&lt;/RawHtml&gt; &lt;FocusPromoInd&gt;0&lt;/FocusPromoInd&gt; &lt;FocusPromoCode&gt;SYSPROM217&lt;/FocusPromoCode&gt; &lt;ActiveInd&gt;1&lt;/ActiveInd&gt; &lt;/Promotion&gt; &lt;Promotion AreaID=&quot;3&quot;&gt; &lt;PromoName&gt;Friends &amp; Family Event&lt;/PromoName&gt; &lt;PromoDesc&gt;&lt;/PromoDesc&gt; &lt;PromoCode&gt;&lt;/PromoCode&gt; &lt;BeginDate&gt;05/01/2010&lt;/BeginDate&gt; &lt;EndDate&gt;05/02/2010&lt;/EndDate&gt; &lt;RawHtml&gt;&lt;h4&gt;Hi&lt;/h4&gt;&lt;/RawHtml&gt; &lt;FocusPromoInd&gt;0&lt;/FocusPromoInd&gt; &lt;FocusPromoCode&gt;SYSPROM217&lt;/FocusPromoCode&gt; &lt;ActiveInd&gt;1&lt;/ActiveInd&gt; &lt;/Promotion&gt; &lt;/PromoData&gt;' BEGIN TRANSACTION Tran_XmlSubmit BEGIN TRY EXEC sp_xml_preparedocument @XmlDocID OUTPUT, @XmlPromoDoc INSERT @Promotion (PromoName, PromoDesc, PromoCode, BeginDate, EndDate, CreatedDate, RawHtml, FocusPromoInd, FocusPromoCode, ActiveInd, AreaID) SELECT LTRIM(RTRIM(PromoName)) AS PromoName, CASE WHEN Len(IsNull(PromoDesc,'')) = 0 THEN NULL ELSE LTRIM(RTRIM(PromoDesc)) END AS PromoDesc, LTRIM(RTRIM(PromoCode)) AS PromoCode, LTRIM(RTRIM(BeginDate))AS BeginDate, LTRIM(RTRIM(EndDate))AS EndDate, GETDATE() AS CreateDate, LTRIM(RTRIM(RawHtml)) AS RawHtml, CONVERT(Bit, FocusPromoInd) AS FocusPromoInd, LTRIM(RTRIM(FocusPromoCode))AS FocusPromoCode, CONVERT(Bit, ActiveInd) AS ActiveInd, CONVERT(INT, LTRIM(RTRIM(AreaID))) AS AreaID FROM OPENXML (@XmlDocID, '/PromoData/Promotion', 2) WITH (PromoName nvarchar(max), PromoDesc nvarchar(max), PromoCode varchar(10), BeginDate datetime, EndDate datetime, CreatedDate datetime, RawHtml nvarchar(max), FocusPromoInd bit, FocusPromoCode varchar(10), ActiveInd bit, AreaID varchar(3) ) --Done parsing XML. Close handle. EXEC sp_xml_removedocument @XmlDocID COMMIT TRANSACTION Tran_XmlSubmit</pre><br> It reads the xml, but when I insert read xml to @Promotion it returns error and rolls back transaction. Please help!<br> </p> 2010-07-30T12:29:38-04:00