<?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>SQL Server (και άλλες databases)</title><link>https://www.dotnetzone.gr:443/cs/forums/28/ShowForum.aspx</link><description>Θέματα που αφορούν τον SQL Server (7.0, 2000, 2005) αλλά και Oracle, Access, DB2, MySQL, κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Trigger on insert για δημιουργία κλειδιού (αριθμού παραστατικού)  σε πίνακα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45484.aspx</link><pubDate>Wed, 15 Oct 2008 22:46:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45484</guid><dc:creator>stathis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45484.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=45484</wfw:commentRss><description>Σας ευχαριστώ όλους,&lt;br&gt;&lt;br&gt;Δηλαδή πιστεύετε ότι με μια SP με transaction για select-insert-update θα είμαι καλυμμένος?&lt;br&gt;</description></item><item><title>Απ: Trigger on insert για δημιουργία κλειδιού (αριθμού παραστατικού)  σε πίνακα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45481.aspx</link><pubDate>Wed, 15 Oct 2008 22:01:51 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45481</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45481.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=45481</wfw:commentRss><description>&lt;P&gt;Το begin tran είναι περιττό γιατί κάθε ξεχωριστό statement εκτελείται από μόνο του σε ξεχωριστό transaction. Ένα inser .. select max(idnum) +1 εξ ορισμού εκτελείται σε ένα transaction, κλειδώνει τον πίνακα και δεν υπάρχει περίπτωση να βγουν ίδιες αριθμήσεις. &lt;/P&gt;
&lt;P&gt;Από την άλλη, αν για οποιοδήποτε λόγο αποτύχει η δημιουργία του αριθμού παραστατικού (π.χ. λόγω μακροχρόνιου blocking) δεν θα ακυρωθεί και η αρχική εισαγωγή του παραστατικού. Εκεί όντως χρειάζεται να υπάρχει transaction το οποίο να καλύπτει και το αρχικό insert και τη δημιουργία του αριθμού παραστατικού.&lt;/P&gt;</description></item><item><title>Απ: Trigger on insert για δημιουργία κλειδιού (αριθμού παραστατικού)  σε πίνακα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45479.aspx</link><pubDate>Wed, 15 Oct 2008 21:44:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45479</guid><dc:creator>Αλέξανδρος Δημητρίου</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45479.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=45479</wfw:commentRss><description>&lt;P&gt;Θα μπορούσες να κάνεις την εισαγωγή παραστατικού με μια procedure στην οποία κατά την καταχώρηση θα επιλέγει το max(idnum) + 1 απο άλλο πίνακα και εκτός αυτού πρίν κάνει το select θα εκτελεί το begin tran ώστε να κλειδώνει τον πίνακα και να μη μπορεί κανείς άλλος να πάρει την ίδια αρίθμηση σε περίπτωση ταυτόχρονης καταχώρησης.&lt;/P&gt;</description></item><item><title>Απ: Trigger on insert για δημιουργία κλειδιού (αριθμού παραστατικού)  σε πίνακα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45478.aspx</link><pubDate>Wed, 15 Oct 2008 20:17:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45478</guid><dc:creator>stathis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45478.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=45478</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;DaltonGR:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Μια σκέψη..&lt;/p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;Ευχαριστώ για την απάντηση φίλε Dalton,&lt;br&gt;&lt;br&gt;Δηστυχώς αυτό δεν μπορεί να δουλέψει με την περίπτωση παραστατικών γιατί το παραστατικό πρέπει να δεσμεύει αριθμό κατά την αποθήκευση.&lt;br&gt;Υπάρχει η περίπτωση ένας χρήστης να ανοίξει μια φόρμα για καταχώρηση νεου παραστατικού και τελικά να μην το αποθηκεύσει, ενώ στο μεταξύ &lt;br&gt;άλλος χρήστης να έχει ανοίξει με την σειρά του νέα φόρμα και έτσι να μην υπάρχει ακολουθία στην αρίθμηση.&lt;br&gt;&lt;br&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;p&gt;Δεν υπάρχει κάποιο πρόβλημα...&lt;/p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;Παναγιώτη, νομίζω και εγώ ότι ίσως δουλέψει η πρότασή σου. Το δοκιμάζω και επανέρχομαι&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Trigger on insert για δημιουργία κλειδιού (αριθμού παραστατικού)  σε πίνακα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45477.aspx</link><pubDate>Wed, 15 Oct 2008 20:05:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45477</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45477.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=45477</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;stathis:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;BR&gt;&lt;BR&gt;Το πρόβλημα είναι ότι αυτό δουλεύει μόνο εάν γίνει εισαγωγή μίας εγγραφής (το @@rowcount του πίνακα inserted=1)&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Δεν υπάρχει κάποιο πρόβλημα. Άνετα μπορείς να γράψεις 2-3 διαφορετικά inserts μέσα στο trigger τα οποία θα ελέγχουν τον τύπο του παραστατικού, π.χ. insert into B select ... from inserted where inserted.Type=1; insert into B select ... from inserted where inserted.Type=2 . &lt;/P&gt;
&lt;P&gt;Ή μπορείς να κάνεις κάπως πιο περίπλοκο το insert για να δουλέψει με τη μία, π.χ.&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;insert&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;into&lt;/SPAN&gt; B (InvoiceID,InvoiceNumber)&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;select&lt;/SPAN&gt; InvoiceID, (&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;SELECT&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:fuchsia;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;MAX&lt;/SPAN&gt;(InvoiceNumber)+1 &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;From&lt;/SPAN&gt; B &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;where&lt;/SPAN&gt; B.InvoiceType=inserted.InvoiceType)&lt;BR&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;from&lt;/SPAN&gt; inserted&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Δεν προλαβαίνω να&amp;nbsp;δοκιμάσω το παραπάνω για να&amp;nbsp;βεβαιωθώ ότι η σύνταξη είναι σωστή, αλλά η ιδέα είναι ότι για κάθε εγγραφή στον inserted επιλέγω το μέγιστο αριθμό παραστατικού +1 από τον B και τον βάζω μέσα.&lt;/P&gt;
&lt;P&gt;Γενικά,&amp;nbsp;&amp;nbsp;δεν υπάρχει κανένας λόγος να δουλέψεις με cursors, απλά set operations αρκούν για το 99.999% των περιπτώσεων &lt;/P&gt;</description></item><item><title>Απ: Trigger on insert για δημιουργία κλειδιού (αριθμού παραστατικού)  σε πίνακα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45475.aspx</link><pubDate>Wed, 15 Oct 2008 19:20:21 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45475</guid><dc:creator>DaltonGR</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45475.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=45475</wfw:commentRss><description>&lt;P&gt;Μια σκέψη,&lt;/P&gt;
&lt;P&gt;γιατί όταν ο χρήστης επιλέξει τι τύπο παραστατικού θα έχει, εσύ να κάνεις ένα select και να πέρνεις το μεγαλύτερο ID του Β πίνακα με βάση τον τύπο του παραστατικού.&lt;/P&gt;
&lt;P&gt;π.χ&lt;/P&gt;
&lt;P&gt;select max(id) from tblB where tupos='a'&lt;/P&gt;
&lt;P&gt;ή&lt;/P&gt;
&lt;P&gt;select id from tblB where tupos='a' order by id desc&lt;/P&gt;
&lt;P&gt;και στο αποτέλεσμα προσθέτεις +1.&lt;/P&gt;
&lt;P&gt;αν κατάλαβα σωστά, μπορεί και να δουλέψει έτσι.ελπίζω να βοήθησα.&lt;/P&gt;</description></item><item><title>Trigger on insert για δημιουργία κλειδιού (αριθμού παραστατικού)  σε πίνακα</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45474.aspx</link><pubDate>Wed, 15 Oct 2008 18:47:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45474</guid><dc:creator>stathis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45474.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=45474</wfw:commentRss><description>Καλημέρα σε όλους,&lt;br&gt;&lt;br&gt;Έχω έναν πίνακα Α στον οποίο θέλω να αποθηκεύω παραστατικά. Ανάλογα με τον τύπο του παραστατικού, πρέπει να ακολουθείται μια λογική αύξουσας αρίθμησης.&lt;br&gt;Έτσι πχ, για τον παραστατικό τύπου 1, η αρίθμηση έχει σταματήσει στον αριθμό 20, ενώ για το παραστατικό τύπου 2, η αρίθμηση έχει σταματήσει στον αριθμό 12.&lt;br&gt;Οι τύποι των παραστατικών και η αρίθμηση βρίσκονται αποθηκευμένοι σε έναν δεύτερο πίνακα Β.&lt;br&gt;&lt;br&gt;Ο πίνακας Α διαθέτει ένα primary key με identity increment και ένα πεδίο για τον αριθμό παραστατικού.&lt;br&gt;&lt;br&gt;Έχω σκεφτεί να δημιουργήσω έναν trigger after insert, που να διαβάζει την εγγραφή και ανάλογα με τον τύπο παραστατικού να ενημερώνει &lt;br&gt;αφενός το πεδίο του αριθμού παραστατικού του πίνακα Α και αφετέρου την αρίθμηση του πίνακα Β&lt;br&gt;&lt;br&gt;Το πρόβλημα είναι ότι αυτό δουλεύει μόνο εάν γίνει εισαγωγή μίας εγγραφής (το @@rowcount του πίνακα inserted=1),&lt;br&gt;&lt;br&gt;Θα μπορούσα να δημιουργήσω ένα cursor για τις εγγραφές του inserted πίνακα, αλλά αυτό δεν μου φαίνεται και τόσο καλή ιδέα, ιδίως μέσα σε trigger.&lt;br&gt;&lt;br&gt;Φαντάζομαι ότι πρόκειται για κλασική φάση για όποιον έχει ασχοληθεί με εφαρμογή τιμολόγησης και παραστατικών.&lt;br&gt;&lt;br&gt;Ευχαριστώ.&lt;br&gt;</description></item></channel></rss>