<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlserver.ro/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>T-SQL</title><link>http://sqlserver.ro/forums/15/ShowForum.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Re: Transaction</title><link>http://sqlserver.ro/forums/thread/905.aspx</link><pubDate>Thu, 16 Nov 2006 23:44:29 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:905</guid><dc:creator>rremus</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/905.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=905</wfw:commentRss><description>&lt;p&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://sqlserver.ro/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;ssandu:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/p&gt;&lt;p&gt;Am patit un fapt interesant.&lt;/p&gt;&lt;p&gt;BEGIN TRANSACTION&lt;br /&gt;INSERT INTO Tabela1 ....&lt;br /&gt;INSERT INTO Tabela2 ...&lt;br /&gt;COMMIT&lt;/p&gt;&lt;p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;Ai patit un fapt banal. Ai comis o transactie fara ca sa te intereseza daca rezultatul ei e consistent&amp;nbsp;sau nu. Daca&amp;nbsp;verifici @@ERROR, trebuie sa-l verifici dupa &lt;em&gt;fiecare&lt;/em&gt; statement. Daca primul&amp;nbsp;INSERT a picat (e.g. unique constraint violation), al doilea INSERT va reseta @@ERROR.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Nu e clar din exemplu daca transactia este o subtranzactie intr-o alta tranzactie. Daca nu e, atunci codul e incorect si pentru ca incearca sa faca ROLLBACK &lt;em&gt;dupa&lt;/em&gt; ce a facut COMMIT. Daca e, atunci codul risca sa devina incorect la o schimbare minora&amp;nbsp;&amp;nbsp;(e.g. daca caller-ul nu mai porneste o tranzactie explicita). Normal COMMIT-ul se face pe un branch al IF-ului si ROLLBACK pe celalalt.&lt;/p&gt;&lt;p&gt;Numai de bine,&lt;br /&gt;~Remus&lt;/p&gt;</description></item><item><title>Re: Transaction</title><link>http://sqlserver.ro/forums/thread/787.aspx</link><pubDate>Tue, 07 Nov 2006 14:19:52 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:787</guid><dc:creator>xmldeveloper</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/787.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=787</wfw:commentRss><description>&lt;p&gt;SET XACT_ABORT ON transforma &lt;em&gt;majoritatea&lt;/em&gt; &lt;strong&gt;batch abort errors&lt;/strong&gt; in &lt;strong&gt;transaction abort errors&lt;/strong&gt;. Chiar la documentul respectiv&amp;nbsp;m-am gandit cand am zis asta&amp;nbsp;&lt;a href="http://www.sommarskog.se/error-handling-I.html#XACT_ABORT"&gt;http://www.sommarskog.se/error-handling-I.html#XACT_ABORT&lt;/a&gt;. &lt;em&gt;Majoritatea&lt;/em&gt; inseamna &lt;em&gt;&lt;strong&gt;nu chiar toate&lt;/strong&gt;&lt;/em&gt;. Din acest motiv inca mai verific &lt;strong&gt;@@ERROR&lt;/strong&gt;-ul.&lt;/p&gt;&lt;p&gt;De ce error handling in trigger? Desi un trigger trebuie sa fie &lt;em&gt;by design&lt;/em&gt; rapid daca business logic-ul din spatele lui e complex atunci eu as face error handling si in trigger. Pe urma in acelasi document poti observa ca &lt;em&gt;aproape toate&lt;/em&gt; erorile intr-un trigger determina un rollback automat. &lt;em&gt;Aproape toate&lt;/em&gt; dar nu &lt;strong&gt;toate&lt;/strong&gt;!&lt;/p&gt;</description></item><item><title>Re: Transaction</title><link>http://sqlserver.ro/forums/thread/786.aspx</link><pubDate>Tue, 07 Nov 2006 12:39:27 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:786</guid><dc:creator>rsocol</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/786.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=786</wfw:commentRss><description>&lt;p&gt;Cristi,&lt;/p&gt;&lt;p&gt;Daca ai folosit SET XACT_ABORT ON nu vad de ce ar mai trebui verificat @@ERROR-ul dupa fiecare instructiune. E suficient&amp;nbsp;ori una, ori cealalta. Personal, eu prefer sa tin SET XACT_ABORT OFF si sa verific @@ERROR-ul.&lt;/p&gt;&lt;p&gt;In al doilea rand, de ce trebuie error handling in trigger ? Daca apare o eroare intr-un trigger, se face automat rollback si se termina batch-ul care a declansat trigger-ul.&lt;/p&gt;&lt;p&gt;Pentru detalii, vezi &lt;a href="http://www.sommarskog.se/error-handling-I.html"&gt;http://www.sommarskog.se/error-handling-I.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Razvan&lt;/p&gt;</description></item><item><title>Re: Transaction</title><link>http://sqlserver.ro/forums/thread/766.aspx</link><pubDate>Mon, 06 Nov 2006 13:26:18 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:766</guid><dc:creator>xmldeveloper</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/766.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=766</wfw:commentRss><description>&lt;p&gt;Fara cod e greu de comentat!&lt;/p&gt;&lt;p&gt;Poate e un INSTEAD OF trigger.&lt;/p&gt;</description></item><item><title>Re: Transaction</title><link>http://sqlserver.ro/forums/thread/764.aspx</link><pubDate>Mon, 06 Nov 2006 13:04:37 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:764</guid><dc:creator>ssandu</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/764.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=764</wfw:commentRss><description>Totusi de ce triggerul a actionat daca in Tabela1 nu am rand inserat ?</description></item><item><title>Re: Transaction</title><link>http://sqlserver.ro/forums/thread/762.aspx</link><pubDate>Mon, 06 Nov 2006 12:11:14 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:762</guid><dc:creator>xmldeveloper</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/762.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=762</wfw:commentRss><description>&lt;p&gt;SET XACT_ABORT ON&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;BEGIN TRANSACTION&lt;/p&gt;&lt;p&gt;INSERT INTO Tabela1 ....&lt;/p&gt;&lt;p&gt;IF @ERROR &amp;lt;&amp;gt; 0&lt;/p&gt;&lt;p&gt;GOTO Failure&lt;/p&gt;&lt;p&gt;INSERT INTO Tabela2 ...&lt;/p&gt;&lt;p&gt;IF @ERROR &amp;lt;&amp;gt; 0&lt;/p&gt;&lt;p&gt;GOTO Failure&lt;/p&gt;&lt;p&gt;COMMIT&lt;/p&gt;&lt;p&gt;RETURN&lt;/p&gt;&lt;p&gt;Failure: &lt;/p&gt;&lt;p&gt;ROLLBACK TRAN&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;In plus trebuie error handling in trigger.&lt;/p&gt;</description></item><item><title>Transaction</title><link>http://sqlserver.ro/forums/thread/761.aspx</link><pubDate>Mon, 06 Nov 2006 11:31:35 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:761</guid><dc:creator>ssandu</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/761.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=761</wfw:commentRss><description>&lt;p&gt;Am patit un fapt interesant.&lt;/p&gt;&lt;p&gt;Am urmatoarea situatie&lt;/p&gt;&lt;p&gt;Fac insert cu o procedura stocata in 2 tabele cu o tranzactie&lt;/p&gt;&lt;p&gt;BEGIN TRANSACTION&lt;/p&gt;&lt;p&gt;INSERT INTO Tabela1 ....&lt;/p&gt;&lt;p&gt;INSERT INTO Tabela2 ...&lt;/p&gt;&lt;p&gt;COMMIT&lt;/p&gt;&lt;p&gt;IF @ERROR &amp;lt;&amp;gt; 0&lt;/p&gt;&lt;p&gt;ROLLBACK TRANSACTION&lt;/p&gt;&lt;p&gt;La Tabela1 am in trigger AFTER INSERT care insereaza cate un rand in alte 3 tabele&lt;/p&gt;&lt;p&gt;Problema : Totul a functionat perfect dar intr-o zi m-am trezit ca in Tabela1 nu a inserat dar in Tabela2 a inserat. Deasemeni desi in Tabela1 nu a inserat triggerul a functionat si a inserat cate un rand in cele 3 tabele.&lt;/p&gt;&lt;p&gt;E vreo greseala pe undeva si nu o vad eu ?&lt;/p&gt;&lt;p&gt;Sorin Sandu&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>