<?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/5/ShowForum.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Re: Tranzactie cu RAISERROR</title><link>http://sqlserver.ro/forums/thread/8475.aspx</link><pubDate>Tue, 09 Nov 2010 19:35:27 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:8475</guid><dc:creator>B_gd_n[ ]Sahlean</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/8475.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=5&amp;PostID=8475</wfw:commentRss><description>Articolul este la următoarea adresă:&lt;br&gt;&lt;a href="http://"&gt;http://blogs.msdn.com/b/anthonybloesch/archive/2009/03/10/sql-server-error-handling-best-practice.aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;La sfârșitul articolului este un &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-09-46-95-77/Error-Handling.sql"&gt;script SQL&lt;/a&gt; care conține câteva exemple. Scriptul conține șablonul pentru proceduri stocate.&lt;br&gt;&lt;br&gt;Completare: și BOL conține un astfel de șablon: TRY...CATCH (Transact-SQL) (secțiunea: &lt;a href="http://msdn.microsoft.com/en-us/library/ms175976.aspx"&gt;C. Using TRY…CATCH with XACT_STATE&lt;/a&gt;).&lt;br&gt;</description></item><item><title>Re: Tranzactie cu RAISERROR</title><link>http://sqlserver.ro/forums/thread/8474.aspx</link><pubDate>Tue, 09 Nov 2010 08:20:35 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:8474</guid><dc:creator>ignatandrei</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/8474.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=5&amp;PostID=8474</wfw:commentRss><description>Bogdan&lt;br&gt;Ai cumva sablonul complet?Marturisesc ca am inteles ideile, dar ... nu am inteles codul...&lt;br&gt;</description></item><item><title>Re: Tranzactie cu RAISERROR</title><link>http://sqlserver.ro/forums/thread/8473.aspx</link><pubDate>Tue, 09 Nov 2010 05:56:17 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:8473</guid><dc:creator>ssandu</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/8473.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=5&amp;PostID=8473</wfw:commentRss><description>Multumesc&lt;br&gt;Asta era !&lt;br&gt;</description></item><item><title>Re: Tranzactie cu RAISERROR</title><link>http://sqlserver.ro/forums/thread/8472.aspx</link><pubDate>Mon, 08 Nov 2010 21:18:08 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:8472</guid><dc:creator>B_gd_n[ ]Sahlean</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/8472.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=5&amp;PostID=8472</wfw:commentRss><description>Conform BOL, @@ERROR întoarce codul de eroare doar&lt;u&gt; pentru ultima instrucțiune/comandă SQL executată&lt;/u&gt;. În esență, dacă folosiți funcția @@ERROR atunci trebuie să verificați existența unei erori după fiecare execuție a unei instrucțiuni/comenzi SQL incluzând aici fiecare apel de procedură stocată:&lt;br&gt;...&lt;br&gt;EXECUTE procedura1&lt;br&gt;IF @@ERROR &amp;lt;&amp;gt; 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROLLBACK ...&lt;br&gt;...&lt;br&gt;EXECUTE procedura2&lt;br&gt;
IF @@ERROR &amp;lt;&amp;gt; 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ROLLBACK ...&lt;br&gt;&lt;br&gt;Dacă folosiți SQL 2000 citiți aceste materiale publicate de către Erland Sommarskog: &lt;a href="http://www.sommarskog.se/error-handling-I.html"&gt;[1]&lt;/a&gt; &amp;amp; &lt;a href="http://www.sommarskog.se/error-handling-II.html"&gt;[2]&lt;/a&gt;.&lt;br&gt;Dacă folosiți SQL 2005, 2008 [R2] atunci este interesant acest &lt;a href="http://webcache.googleusercontent.com/search?q=cache:mkrgmzzUgY0J:blogs.msdn.com/b/anthonybloesch/archive/2009/03/10/sql-server-error-handling-best-practice.aspx+sql+server+stored+procedure+transactional+template&amp;amp;cd=8&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=ro&amp;amp;client=firefox-a"&gt;articol&lt;/a&gt;. Plecând de la ultimul articol puteți să construiți un șablon de procedură stocată (citiți și comentariile), șablon pe care să-l utilizați pentru implementarea tuturor procedurilor stocate. &lt;br&gt;</description></item><item><title>Re: Tranzactie cu RAISERROR</title><link>http://sqlserver.ro/forums/thread/8471.aspx</link><pubDate>Mon, 08 Nov 2010 14:39:33 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:8471</guid><dc:creator>ssandu</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/8471.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=5&amp;PostID=8471</wfw:commentRss><description>Procedurile alea doar insereaza si se executa de mai multe ori (cat tine cursorul).&lt;br&gt;</description></item><item><title>Re: Tranzactie cu RAISERROR</title><link>http://sqlserver.ro/forums/thread/8470.aspx</link><pubDate>Mon, 08 Nov 2010 13:51:16 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:8470</guid><dc:creator>katalyn</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/8470.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=5&amp;PostID=8470</wfw:commentRss><description>&lt;P&gt;este de la "COMMIT TRANSACTION".&lt;/P&gt;
&lt;P&gt;Ce nu inteleg este de ce folosesti cursoare ? daca cumva procedurile tale sunt proceduri ce intorc date, poti face atfel:&lt;BR&gt;DECLARE @a table (col1 tip1, .., colN tipN)&lt;BR&gt;DECLARE @b table (col1 tip1, .., colN tipN)&lt;/P&gt;
&lt;P&gt;BEGIN TRAN&lt;/P&gt;
&lt;P&gt;begin try&lt;/P&gt;
&lt;P&gt;insert into @a&lt;BR&gt;exec SProc&lt;/P&gt;
&lt;P&gt;insert into @b&lt;BR&gt;exec altSProc&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;commit tran&lt;/P&gt;
&lt;P&gt;end try&lt;BR&gt;begin catch&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;raiserror(....)&lt;BR&gt;rollback&lt;/P&gt;
&lt;P&gt;end catch&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Adica incepi o tranzactie, se executa codul din begin try si end try si daca a ajuns la final, se executa ultima linie ...adica COMMIT. Daca pe undeva a dat eroare, intra pe catch si executa rollback.&lt;/P&gt;
&lt;P&gt;O alta metoda este ca dupa executia procedurilor sa&amp;nbsp;verifici @@error. Acolo unde ai tu in codul tau, practic, verifici daca COMMIT-ul s-a executat. @@error se seteaza la&amp;nbsp;fiecare instructiune executata, adica vei&amp;nbsp;testa daca a fost eroare la&amp;nbsp;instructiunea precedenta.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Tranzactie cu RAISERROR</title><link>http://sqlserver.ro/forums/thread/8469.aspx</link><pubDate>Mon, 08 Nov 2010 13:14:46 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:8469</guid><dc:creator>ssandu</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/8469.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=5&amp;PostID=8469</wfw:commentRss><description>Desi nu prea este indicat sa se foloseasca cursoare nu am avut de ales si a trebuit sa folosesc :(&lt;br&gt;Am o procedura care apeleaza alte 2 proceduri.&lt;br&gt;Arata ceva de genul&lt;br&gt;BEGIN TRANSACTION&lt;br&gt;declare cursor for ...&lt;br&gt;open cursor&lt;br&gt;fetch next ...&lt;br&gt;while @@FETCHSTATUS = 0&lt;br&gt;BEGIN&lt;br&gt;exec SProc&lt;br&gt;fetch next ...&lt;br&gt;END&lt;br&gt;close cursor&lt;br&gt;deallocate cursor&lt;br&gt;declare altcursor for ...&lt;br&gt;open altcursor&lt;br&gt;fetch next ...&lt;br&gt;while @@FETCHSTATUS = 0&lt;br&gt;BEGIN&lt;br&gt;exec altSProc&lt;br&gt;fetch next ...&lt;br&gt;END&lt;br&gt;close altcursor&lt;br&gt;deallocate altcursor&lt;br&gt;COMMIT TRANSACTION&lt;br&gt;IF @@ERROR &amp;lt;&amp;gt; 0&lt;br&gt;ROLLBACK TRANSACTION&lt;br&gt;&lt;br&gt;In altSProc am un RAISERROR si as vrea sa nu se comita transactia, numai ca ea se comite.&lt;br&gt;Cum ar trebui sa fac sa nu se mai comita nimic ?&lt;br&gt;Multumesc&lt;br&gt;</description></item></channel></rss>