<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>XML / XSLT</title><link>https://www.dotnetzone.gr:443/cs/forums/15/ShowForum.aspx</link><description>Η XML και τα παρελκόμενά της (XSD, XSLT, XPath, XQuery, κ.λ.π.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: OpenXML και concurrency</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8115.aspx</link><pubDate>Tue, 20 Dec 2005 05:28:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8115</guid><dc:creator>axaros</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8115.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=15&amp;PostID=8115</wfw:commentRss><description>&lt;P&gt;Mns σε ευχαριστώ. &lt;BR&gt;&lt;BR&gt;Να ρωτήσω και πάλι όμως όλους σας : &lt;BR&gt;Αυτό γιατί δουλεύει : &lt;BR&gt;&lt;BR&gt;UPDATE tblChildren &lt;BR&gt;SET &lt;BR&gt;Name = Cname &lt;BR&gt;FROM OpenXML(@XMLHandler,'/Parent/Child',1) &lt;BR&gt;WITH (Cid bigint, Cname nvarchar(50),Cts nvarchar(30)) &lt;BR&gt;WHERE ParentId = @ParentId AND &lt;BR&gt;Id=Cid AND TS=CAST(CAST(Cts as int) as &lt;STRONG&gt;binary(8)&lt;/STRONG&gt;) &lt;/P&gt;
&lt;P&gt;Όπως και το :&lt;/P&gt;
&lt;P&gt;UPDATE tblChildren&lt;BR&gt;SET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = Cname&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM OpenXML(@XMLHandler,'/Parent/Child',1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WITH (Cid bigint, Cname nvarchar(50),Cts nvarchar(30))&lt;BR&gt;WHERE&amp;nbsp; ParentId = @ParentId AND &lt;BR&gt;&amp;nbsp;&amp;nbsp; Id=Cid AND TS=CAST(CAST(Cts as int) as &lt;STRONG&gt;timestamp&lt;/STRONG&gt;)&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;To SELECT (FOR XML) μου γυρνάει Integer ... &lt;BR&gt;Οπότε :&lt;/P&gt;
&lt;P&gt;exec dbo.UpdateXML '&amp;lt;Parent PId="1"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Child Cid="1" Cname="TESTUPDATE1" Cts="7442"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;Child Cid="2" Cname="TESTUPDATE2" Cts="7443"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;Child Cid="3" Cname="TESTUPDATE3" Cts="7444"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Child Cid="4" Cname="TESTUPDATE4" Cts="7445"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Child Cid="5" Cname="TESTUPDATE5" Cts="7446"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Parent&amp;gt;'&lt;BR&gt;&lt;BR&gt;Γιατί ;&lt;/P&gt;</description></item><item><title>Απ: OpenXML και concurrency</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8108.aspx</link><pubDate>Tue, 20 Dec 2005 03:19:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8108</guid><dc:creator>Νατάσα Μανουσοπούλου</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8108.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=15&amp;PostID=8108</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/mistblue/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;axaros wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt; 
&lt;P&gt;UPDATE tblChildren&lt;BR&gt;SET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = Cname&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM OpenXML(@XMLHandler,'/Parent/Child',1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WITH (Cid bigint, Cname nvarchar(50))&lt;BR&gt;WHERE&amp;nbsp; ParentId = @ParentId AND &lt;BR&gt;&amp;nbsp;&amp;nbsp; Id=Cid&lt;BR&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Το παραπάνω θα πρέπει να είναι κάπως έτσι:&lt;/P&gt;
&lt;P&gt;UPDATE tblChildren&lt;BR&gt;SET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = Cname, LastUpdated=GETDATE()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM OpenXML(@XMLHandler,'/Parent/Child',1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WITH (Cid bigint, Cname nvarchar(50), Ctimestamp datetime)&lt;BR&gt;WHERE&amp;nbsp; ParentId = @ParentId AND &lt;BR&gt;&amp;nbsp;&amp;nbsp; Id=Cid AND LastUpdated=Ctimestamp&lt;/P&gt;
&lt;P&gt;όπου LastUpdated η στήλη που κρατάς την τελευταία αλλαγή. Στη συνέχεια κοιτάς αν το @@ROWCOUNT&amp;nbsp;είναι ίδιο με το πλήθος των Child elements που έχεις, και αν όχι, rollback.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>OpenXML και concurrency</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8106.aspx</link><pubDate>Tue, 20 Dec 2005 03:07:06 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8106</guid><dc:creator>axaros</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8106.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=15&amp;PostID=8106</wfw:commentRss><description>&lt;P&gt;Γεια σας και χαρά σας !!!&lt;BR&gt;Θέλω να δουλέψω με XML για να κάνω κάποιο update σε δύο related (Parent - Child) πίνακες στον SQL Server(2000)&lt;BR&gt;&lt;BR&gt;Τρέχω το εξής procedure :&lt;/P&gt;
&lt;P&gt;CREATE PROCEDURE UpdateXML&lt;BR&gt;@Parent ntext&lt;BR&gt;AS&lt;/P&gt;
&lt;P&gt;DECLARE @XMLHandler int, @ParentID bigint&lt;/P&gt;
&lt;P&gt;EXEC sp_xml_preparedocument @XMLHandler output, @Parent&lt;BR&gt;IF @@Error&amp;lt;&amp;gt;0&lt;BR&gt;BEGIN&lt;BR&gt;&amp;nbsp;SELECT -1&lt;BR&gt;&amp;nbsp;RETURN&lt;BR&gt;END&lt;/P&gt;
&lt;P&gt;BEGIN TRANSACTION&lt;/P&gt;
&lt;P&gt;SET @ParentID=(SELECT PId&lt;BR&gt;&amp;nbsp; &amp;nbsp; FROM OpenXML(@XMLHandler,'/Parent',1)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WITH (PId bigint))&lt;/P&gt;
&lt;P&gt;IF @@Error&amp;lt;&amp;gt;0&lt;BR&gt;BEGIN&lt;BR&gt;&amp;nbsp;ROLLBACK TRANSACTION&lt;BR&gt;&amp;nbsp;SELECT -2&lt;BR&gt;&amp;nbsp;RETURN&lt;BR&gt;END&lt;/P&gt;
&lt;P&gt;UPDATE tblChildren&lt;BR&gt;SET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = Cname&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM OpenXML(@XMLHandler,'/Parent/Child',1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WITH (Cid bigint, Cname nvarchar(50))&lt;BR&gt;WHERE&amp;nbsp; ParentId = @ParentId AND &lt;BR&gt;&amp;nbsp;&amp;nbsp; Id=Cid&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;IF @@Error&amp;lt;&amp;gt;0&lt;BR&gt;BEGIN&lt;BR&gt;&amp;nbsp;ROLLBACK TRANSACTION&lt;BR&gt;&amp;nbsp;SELECT -3&lt;BR&gt;&amp;nbsp;RETURN&lt;BR&gt;END&lt;/P&gt;
&lt;P&gt;COMMIT TRANSACTION&lt;/P&gt;
&lt;P&gt;exec sp_xml_removedocument @XMLHandler&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;έτσι για παράδειγμα :&lt;/P&gt;
&lt;P&gt;uSE [tEST dATABASE]&lt;BR&gt;exec dbo.UpdateXML '&amp;lt;Parent PId="2"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Child Cname="TESTAdRA1" Cid="6"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Child Cname="TESdTARA2" Cid="7"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Child Cname="TESxTARA3" Cid="8"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Child Cname="TEScTARA4" Cid="9"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Child Cname="TESTxARA5" Cid="10"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Parent&amp;gt;'&lt;/P&gt;
&lt;P&gt;και δουλεύει μια χαρά ...&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Πως θα κάνω όμως handle το concurrency;(έχω προσθέσει timestamps και θα ήθελα το update να γίνεται rollback αν οποιοδήποτε πχ child rec έχει διαφοροποιηθεί από αυτό που πήρα πριν το update)&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>