<?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>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34339.aspx</link><pubDate>Wed, 15 Aug 2007 09:10:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34339</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34339.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34339</wfw:commentRss><description>&lt;P&gt;Γιώργο θα έλεγα οτι δεν έπεσες καθόλου έξω.... για να μην πω οτι ίσως έχουμε συναντηθεί και κάπου και δε το ξέρεις.... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-11.gif" alt="Cool" /&gt; (σε πειράζω... αλλά ποτέ δεν ξέρεις...)&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34338.aspx</link><pubDate>Wed, 15 Aug 2007 08:34:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34338</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34338.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34338</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;Thiseas:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Χμ... γίνεται με 2 προγράμματα: ...&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Xμ, ένα μήνυμα που δεν το είδα, παρά όταν έκανα post... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;. Δεν έπεσα και πολύ έξω, ε;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34337.aspx</link><pubDate>Wed, 15 Aug 2007 08:32:21 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34337</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34337.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34337</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;sakalis:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Και να ρωτήσω εγώ η επικοινωνία της ασύρματης συσκευής με τον database server πως γίνεται?&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Γιώργο, με όποιον τρόπο και να γίνεται η επικοινωνία, δεν αλλάζουν κάποια πράγματα:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Είναι ασύρματη, οπότε μιλάμε κάτι μεταξύ WiFi, Infrared και Bluetooth ή έστω και RF. Όλα τα προηγούμενες συνδέσεις&amp;nbsp;μπορούν και συμμετέχουν σε δίκτυο TCP/IP. Ο τρόπος της επικοινωνίας είναι το TCP/IP. &lt;/LI&gt;
&lt;LI&gt;Η ασύρματη σύνδεση, έχει μεταβλητό βαθμό διαθεσιμότητας και ποιότητας, ανάλογα με την θέση του mobile client, τις παρεμβολές που δέχεται, την κατάσταση της μπαταρίας του&amp;nbsp;mobile client, μέχρι και το "κακό κάρμα"&amp;nbsp; &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;,&amp;nbsp;του χειριστή&amp;nbsp;που την κρατάει! Η σύνδεση μπορεί για πολλούς λόγους είναι αναξιόπιστη, και καλό θα ήταν να μπορεί ο mobile client να παίζει και σε off-line mode - να μην απαιτείται να είναι live όλη την ώρα η σύνδεσή του με τον database server για να μπορεί κάποιος να χειρίζεται την εφαρμογή.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Έχεις κάποιο λόγο να ενδιαφέρεσαι πως πραγματικά επικοινωνεί&amp;nbsp;το mobile&amp;nbsp;client με το database server για την καλύτερη απόδοση της εφαρμογής;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34336.aspx</link><pubDate>Wed, 15 Aug 2007 08:17:14 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34336</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34336.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34336</wfw:commentRss><description>&lt;P&gt;Χμ... γίνεται με 2 προγράμματα:&lt;BR&gt;Έναν client-sofware έναν server-sofware και τα 2 γραμμένα από εμάς σε Delphi (θα τα αλλάξουμε όμως γιατι γυρνάμε&amp;nbsp;σιγά σιγά όλη την εφαρμογή&amp;nbsp;προς C#, .Net&amp;nbsp;και αυτό το κομμάτι θα γίνει με το mobile edition... τεσπα).&lt;BR&gt;Προς το παρών ο&amp;nbsp;client-sofware που είναι στο RF (το οποίο έχει DOS ή Windows)&amp;nbsp;επικοινωνεί με τον server-software που ειναι εγκατεστημένος συνήθως στο database server&amp;nbsp;και αυτός με τη σειρά του καλεί Store Procedures.... xοντρικά xοντρικά - επέτρεψε μου να μην αναφέρθώ σε λεπτομέριες για ευνοήτους λόγους.&lt;/P&gt;
&lt;P&gt;Σε έναν server μπορουν να κάνουνε connect N RF-Terminals.&lt;BR&gt;H Αρχιτεκτονική είναι απλή και γρήγορη και δεν είναι και τίποτα σπουδαίο, πέρα του γεγονότος οτι το ελέγχουμε κατά το 99% διότι είναι φτιαγμένο από εμάς.&lt;BR&gt;Ο client είναι text mode (άλλοστε τυγχάνει χειρισμού από εργάτες παραγωγής που δεν έχουν μεγάλες απαιτήσεις και ουτε θελουν πολλά πολλά...) και η επικοινωνία γίνεται σε συγκεκριμένη πόρτα που την ορίζεις μέσα από την εφαρμογή μας... αυτά /&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34333.aspx</link><pubDate>Wed, 15 Aug 2007 07:24:50 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34333</guid><dc:creator>sakalis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34333.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34333</wfw:commentRss><description>&lt;P&gt;Και να ρωτήσω εγώ η επικοινωνία της ασύρματης συσκευής με τον database server πως γίνεται?&lt;/P&gt;
&lt;P&gt;\&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34332.aspx</link><pubDate>Wed, 15 Aug 2007 07:10:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34332</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34332.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34332</wfw:commentRss><description>&lt;P&gt;Δεν θα ήθελα να σε διορθώσω στην πολύ καλή ανάλυση σου γιατί&amp;nbsp;οι διορθώσεις μου θα ήταν στο να τοποθετήσω τα πράγματα λίγο πιο κοντά σε αυτό που αντιμετωπίζουμε σαν πραγματικότητα αλλά πολύ λίγο&amp;nbsp;θα άλλαζε το περιέχομενο των συμπερασμάτων σου και στην ουσία θα έμοιαζε σαν μια διόρθωση απλά για να πω κάτι.... πράγμα που δεν χρειάζετε!!&lt;/P&gt;
&lt;P&gt;Απλά θα ήθελα να συμπληρώσω&amp;nbsp;λίγα παρακάτω:&lt;/P&gt;
&lt;P&gt;1. Ένα δίκτυο αναφέρεται ως προβληματικό είτε γιατί είναι... προβληματικό, είτε γιατι ο φόρτος μια δεδομένη στιγμή (peak)&amp;nbsp;πολλές φορές το κάνει προβληματικό.&lt;/P&gt;
&lt;P&gt;2.&amp;nbsp;Οι κινήσεις&amp;nbsp;(transactions)&amp;nbsp;γίνονται είτε ενσύρματα&amp;nbsp;είτε ασύρματα (μέσω remote frequency terminals με κατάλληλο software). Η πολύ σωστή σου προσέγγιση που την αναφέρεις σαν (near real time) πραγματικά ανταποκρίνεται 100% στην πραγματικότητα: Υπάρχουν στιγμές που ορισμένα πράγματα πρέπει να γίνουν σε πραγματικό χρόνο asap.&lt;/P&gt;
&lt;P&gt;3. Η απαιτήσεις του πελάτη είναι τέτοιες ώστε να ζητά σε χρόνο ελάχιστο (π.χ. σε ένα Σαββατοκύριακο) αλλαγές αλλά και νέες δυνατότητες οι οποίες αν έπρεπε να συντηρηθούν&amp;nbsp;από μια εφαρμογή θα ήταν αδύνατον από πλευράς χρόνου...&amp;nbsp;(βλέπε versioning control,&amp;nbsp;compiling&amp;nbsp;στον κώδικα, executables,&amp;nbsp;κλπ κλπ)&amp;nbsp;και σκεφτείτε οτι&amp;nbsp;τα παραπάνω αναφέρονται σε έναν μόνο πελάτη....&amp;nbsp;Στην πραγματικότητα&amp;nbsp;οι πελάτες είναι πολλοί (σε όλη την Ελλάδα)&amp;nbsp;και φυσικά η εφαρμογή που τους υποστηρίζει είναι (και πρέπει να είναι).... μία!&lt;/P&gt;
&lt;P&gt;Πιστεύω&amp;nbsp;πως η λύση των Stored Procedures και η κλήση τους&amp;nbsp;από ένα "έξυπνο" interface&amp;nbsp;από την εφαρμογή μας....&amp;nbsp;ειναι μονόδρομος. &lt;BR&gt;Αυτή είναι η "Μαυρίλα" αλλά και η ομορφία των custom made εφαρμογών... και των προγραμματιστών τους.... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34328.aspx</link><pubDate>Wed, 15 Aug 2007 06:24:45 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34328</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34328.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34328</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;Thiseas:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Αλλά σκέψου και πιο λογικά,... και σε ρωτώ να μου απαντήσεις (αν θες βέβαια).&lt;BR&gt;Σκέψου το παραπάνω constraint να κλειθεί από έναν client.&lt;BR&gt;&lt;BR&gt;θα πρέπει:&lt;BR&gt;1. Να ανοίξεις transaction (start trans)&lt;BR&gt;2. Να κάνεις το update 1&lt;BR&gt;3. Να κάνεις το update 2&lt;BR&gt;4. Να κλείσεις το transaction (commit)&lt;BR&gt;&lt;BR&gt;Σκέψου οτι σε ένα δίκτυο με κινήσεις εκατοντάδων "πακέτων" το λεπτό τα παραπάνω 4 βήματα θα εκτελεστούν σειριακά και με διαφορετικές κλήσεις στον server.&lt;BR&gt;Πιστεύεις οτι το παραπάνω είναι πιο γρήγορο από να constrain στον πίνακα ή ένα trigger που θα εκτελεστεί όλο στον&amp;nbsp; server επειδή έτσι λέει η βιβλιογραφία?&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Τα βήματα δεν είναι ανάγκη να γίνουν από τον client. Κάνω ένα λογικό συνειρμό και όπου κάνω λάθος με διορθώνεις - δεν ξέρω τι ακριβώς έχεις στο μυαλό σου ή προσπαθείς να περιγράψεις:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Περιγράφεις για ένα σύστημα server/client με πολλούς clients επάνω σε ένα «φορτωμένο» ή «αργό» δίκτυο&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Να υποθέσω ακόμα ότι το σύστημα είναι «near real time», οπότε το perfomance του είναι το πρώτο μέλημα&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Δεν μπορεί κανείς να εγγυηθεί για τίποτα, εκτός από εσένα, το προγραμματιστή, που μπορείς να υποσχεθείς ότι η εφαρμογή σου θα κάνει ότι καλύτερο δυνατό για να ανταπεξέλθει στον σκοπό της&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Λογικό συμπέρασμα είναι, να είναι θεμιτό να μεταφερθούν όσο λιγότερα δεδομένα επάνω από το δίκτυο και όσο πιο γρήγορα, λόγω του «προβληματικού» δικτύου&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Κανείς θα ήθελε μια τέτοια εφαρμογή να έχει πολλά tiers γιατί θα ήταν πιο αργή, και θα είχαμε προβλήματα επικοινωνίας μεταξύ των tiers μιας και το δίκτυο είναι προβληματικό.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Λογικά η εφαρμογή έχει ένα τμήμα business intelligence, που παίρνει αποφάσεις της εφαρμογής. Αυτό που χρειάζεται είναι το business intelligence να είναι όσο πιο «κοντά» στη βάση δεδομένων σου, ώστε να ελαχιστοποιηθούν οι χρόνοι που θα απαιτηθούν να «διαβάζονται» τα δεδομένα για τις αποφάσεις του, αλλά και να «γράφονται» τα αποτελέσματα από τις αποφάσεις πίσω στην βάση δεδομένων.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Μια ακόμα σκέψη είναι αφού μιλάμε για μια «near real time» εφαρμογή, τα δεδομένα δεν πρέπει να «κλειδώνονται» από ένα client, αλλά θα πρέπει να υπάρχει η μέγιστη διαθεσιμότητά τους σε όλους τους clients. Οπότε οι χρόνοι μεταφοράς είναι critical να είναι οι ελάχιστοι δυνατοί&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Δεν θα ήθελα τα transactions να ξεκινάνε από τους clients και να μεταφέρονται επάνω από το δίκτυο – θα ήθελα να είχα ένα τρόπο που ο client θα έκανε initiate το transaction, θα εκτελούταν εξ’ ολοκλήρου στο server και ο client θα έπαιρνε πίσω ένα αποτέλεσμα Boolean μορφής – ολοκληρώθηκε επιτυχημένα/δεν ολοκληρώθηκε.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Έτσι όπως το βλέπω εγώ δεν θα ήθελα το business intelligence να είναι μέσα στην client εφαρμογή. Είναι μεγάλο ρίσκο, και αν αποτύχω, αποτυγχάνει και η εφαρμογή μου. Θα πρέπει να επικοινωνεί η εφαρμογή μου με κάποιο μηχανισμό με το server ώστε να μεταφέρει τα ελάχιστα δεδομένα που απαιτούνται ώστε να κάνουν initiate το transaction στον server. Σαν υποψήφιους μηχανισμούς σκέφτομαι Web Services, DCOM/Enterprise components και store procedures μέσα στην βάση.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Τα Web services και το DCOM/Enterprise components νομίζω ότι εύκολα θα τα απορρίπτονται από κάποιον λόγω του όγκου των δεδομένων που χρειάζονται να μεταφέρουν επάνω από το δίκτυο.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Τα store procedures από την άλλη μεριά φαίνεται να είναι ο ιδανικός υποψήφιος για να μπορέσει κάποιος να υλοποιήσει το business intelligence της εφαρμογής – αδιαμφισβήτητα θα είναι τα πιο αξιόπιστα από όλους τους άλλους μηχανισμούς ώστε να φέρουν σε πέρας επιτυχημένα την αποστολή τους μιας και δεν επηρεάζεται η απόδοση τους από το «προβληματικό» δίκτυο. Και να χάσει ο client την επικοινωνία με τον server, δεν θα επηρεαστεί το transaction. &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Ένας τρόπος να ξεπεραστεί αυτό το πρόβλημα της απώλειας σύνδεσης με το server κατά την διάρκεια του tranaction και να έχουμε καλύτερα αποτελέσματα στις επιδώσεις της εφαρμογής, θα ήταν να είναι ασύγχρονα τα initiations των transactions με την λήψη των αποτελεσμάτων, ώστε να μην υπάρχει η ανάγκη να μείνουν οι συνδέσεις μέσω δικτύου ανοιχτές για πολύ ώρα.&lt;/LI&gt;&lt;/UL&gt;
&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;Thiseas:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;[edited: sorry... Γιώργο ... αλλά είδα την απάντηση σου αφού πάτησα save στο post μου... και δεν θα ήθελα να το σβήσω...&amp;nbsp;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt; ]&lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34326.aspx</link><pubDate>Wed, 15 Aug 2007 04:59:40 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34326</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34326.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34326</wfw:commentRss><description>Δεν συνηθίζω να κριτικές προς άτομα που δεν γνωρίζω και ιδιαίτερα να κάνω σε άλλους πράγματα που με ενοχλούν όταν μου τα κάνουνε.&lt;br&gt;Αναφερόμενος σε "εφαρμογές της πλάκας"&amp;nbsp; φυσικά και δεν εννοώ αυτές που φτιάχνεις εσύ προσωπικά μιας που δεν τις έχω δει και βέβαια ούτε που σε γνωρίζω!&lt;br&gt;&lt;br&gt;Εννοώ οτι εφαρμογές τις πλάκας (γενικά) υπάρχουν πολλές ακόμα κι αν επαγγέλονται οτι ακολουθούν τα οποιαδήποτε state of the art πρότυπα ανάπτυξης εφαρμογών κλπ. κλπ.&lt;br&gt;Όσο αφορά στη βιβλιογραφία σε διαβεβαιώ οτι έχω διαβάσει πάρα πολύ στη ζωή μου... ειδικά αυτά τα θέματα.&lt;br&gt;&lt;br&gt;Αυτό το οποίο γράφω και υποστηρίζω δεν είναι μία "και καλά" γνώμη που λέγετε για να τραβήξει την προσοχή με το άλλοθι οτι "διαφέρει" και "ξεχωρίσει" από την πεπατημένη... δηλαδή&amp;nbsp; "όλη την Βιομηχανία"&amp;nbsp; όπως την αναφέρεις.&lt;br&gt;&lt;br&gt;Όπως είπα οι λόγοι είναι πάρα πολλοί:&lt;br&gt;- Performance&lt;br&gt;- Security&lt;br&gt;- Maintenance&lt;br&gt;&lt;br&gt;Μπορώ αν επιμένεις να στο αναλύσω αν θες, απλά δεν αφορά θέμα του τρέχοντος post.&lt;br&gt;Μιας όμως και διαφώνησες θα ήθελα να το αναλύσεις και να το αιτιολογήσεις... απλά το "είσαι τελείως λάθος" διότι η τάση ή η βιβλιογραφία ή τα διάφορα sites λένε αυτό κι εκείνο κλπ κλπ δεν με πείθουν,... και ξέρεις γιατί?&lt;br&gt;&lt;br&gt;Για να έρθω σε αυτό που έλεγα πριν, ο κόσμος είναι γεμάτος crepping projects... ποιος μου εγγυάται εμένα οτι μια υπέροχη αναφορά στην υλοποίηση ενός project που έγινε με την μεθοδολογία που υποστηρίζεις είναι και η βέλτιστη δυνατή?&lt;br&gt;Ποιός μου λέει εμένα οτι αυτός που την ανέπτυξε είχε ακριβώς την δική σου νοοτροπία και ακολούθησε την δεδομένη μεθοδολογία με κλειστά μάτια...&lt;br&gt;Όταν ο πελάτης μου εμένα μου πει "ο χρόνος είναι για μένα unaccpetable" και κινδυνεύσω να χάσω ένα έστω και μικρό budjet των 20000 euro, γιατί να το χάσω αν βλέπω οτι με την ίδια υλοποίηση με SP το perfomance βελτιώνετε... εκθετικα?&lt;br&gt;Να πάω δηλαδή σε όλους τους κ.κ. συγγραφείς των βιβλίων που επαγγέλονται την μη χρήση των stored procedures και τους ζητήσω να λεφτα που δεν κέρδισα από τα χαμένα projects,... ?? (ok... υπερβολή... αλλά νομίζω το "έπιασες" αυτό που θέλω να πω).&lt;br&gt;&lt;br&gt;Επανέρχομαι, λοιπόν, στο αρχικό μου ερώτημα.&lt;br&gt;Ποιός θα μου πεί τι είναι ποιο γρήγορο (μιας που μιλάμε για perfomance) ?&lt;br&gt;&lt;br&gt;Σε διαβεβαιώ,.... κανείς άλλος πέρα από την εφαρμογή και την υλοποίηση όλων των παραπάνω στην πράξη, με βάση τις ανάγκες του συγκεκριμένου πελάτη, σε πραγματικό χώρο και χρόνο,.... και πολλές φορές και με το χρονόμετρο στο "χέρι",... ειδικά όταν με βάση τον χρόνο "παίζονται" πάρα πολλά φράγκα!!&lt;br&gt;&lt;br&gt;Αλλά σκέψου και πιο λογικά,... και σε ρωτώ να μου απαντήσεις (αν θες βέβαια).&lt;br&gt;Σκέψου το παραπάνω constraint να κλειθεί από έναν client.&lt;br&gt;&lt;br&gt;θα πρέπει:&lt;br&gt;1. Να ανοίξεις transaction (start trans)&lt;br&gt;2. Να κάνεις το update 1&lt;br&gt;3. Να κάνεις το update 2&lt;br&gt;4. Να κλείσεις το transaction (commit)&lt;br&gt;&lt;br&gt;Σκέψου οτι σε ένα δίκτυο με κινήσεις εκατοντάδων "πακέτων" το λεπτό τα παραπάνω 4 βήματα θα εκτελεστούν σειριακά και με διαφορετικές κλήσεις στον server.&lt;br&gt;Πιστεύεις οτι το παραπάνω είναι πιο γρήγορο από να constrain στον πίνακα ή ένα trigger που θα εκτελεστεί όλο στον&amp;nbsp; server επειδή έτσι λέει η βιβλιογραφία?&lt;br&gt;&lt;br&gt;[edited: sorry... Γιώργο ... αλλά είδα την απάντηση σου αφού πάτησα save στο post μου... και δεν θα ήθελα να το σβήσω...&amp;nbsp;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt; ]&lt;br&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34325.aspx</link><pubDate>Wed, 15 Aug 2007 04:57:36 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34325</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34325.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34325</wfw:commentRss><description>&lt;P&gt;@sakalis&lt;BR&gt;Γιώργο, αυτά που γράφεις είναι πιθανό να προκαλέσουν παρεξήγηση - καταλαβαίνω τον τόνο που τα γράφεις, αλλά μπορεί άλλοι να μην τον καταλαβαίνουν. Καλό είναι να βάζεις κάποια smiles, να φαίνεται ότι είναι καυστικά σχόλια αυτά που κάνεις και όχι παρατηρήσεις που αφορούν τον συνομιλητή σου.&lt;/P&gt;
&lt;P&gt;@sakalis &amp;amp; Thiseas&lt;BR&gt;Νομίζω ότι το θέμα του thread εξαντλήθηκε, και πλέον η "διαφωνία" σας είναι "εκτός θέματος"! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;. Θα πρότεινα και στους δύο αν θέλετε&amp;nbsp;να συνεχίσετε την συζήτηση σε αυτό το&amp;nbsp;θέμα να το κάνετε στο νέο thread: &lt;A href="http://www.dotnetzone.gr/cs/forums/thread/34322.aspx"&gt;http://www.dotnetzone.gr/cs/forums/thread/34322.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34318.aspx</link><pubDate>Wed, 15 Aug 2007 03:43:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34318</guid><dc:creator>sakalis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34318.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34318</wfw:commentRss><description>&lt;P&gt;&amp;nbsp;Καταρχήν δεν ανέβασα κανένα τόνο. Αυτά που είπα ήταν πολύ ήρεμα. Δεν προσέβαλα κανένα και λυπάμαι αν εσύ τα πήρες προσωπικα.&lt;/P&gt;
&lt;P&gt;Καταρχήν για το 2. Δεν έχω τίποτα με τους σερβιτόρους. Ισα ίσα που όταν είναι καλοί σε αυτό που κάνουν τους εκτιμώ ιδιαίτερα. Αυτό που δεν εκτιμώ είναι τους επαγγελματίες στο χώρο που όσο junior και να είναι, δεν ξέρουν τα στοιχειώδη για τις σχεσιακές βάσεις δεδομένων (βλέπε foreign keys). Αν και εσύ άνηκες σε αυτή την κατηγορία, λυπάμαι που το πήρες προσωπικά, δε σκόπευα κάτι τέτοιο.&lt;/P&gt;
&lt;P&gt;Για το 3 έχεις δίκιο δεν το δικαιολόγησα αρκετά. Ωστόσο μία γρήγορη εύρευνα τόσο εδώ όσο και σε sites με πρακτικές καθώς και στη σύγχρονη βιβλιογραφία ίσως σε πείσει. Δεν μπορεί όλη η βιομηχανία και το μεγαλύτερο μέρος της αγοράς πληροφορικής να υποστηρίζει ότι το business logic καλό είναι να μη περιέχεται&amp;nbsp; σε SP. Δεν είμαι κατά των SP, αλλά κατά των σύνθετων SP όπου υλοποιείς όλο ο business Logic. Αυτό δε σημαίνει βέβαια ότι δεν υπάρχουν και εξαιρέσεις&lt;/P&gt;
&lt;P&gt;Για τη δική σου εμπειρία δε την αμφισβητώ, αλλά αυτό δε σημαίνει ότι δεν υπάρχει πιθανά και κάτι καλύτερο που ίσως αγνοείς. Αλλά τι ξέρω εγώ... εφαρμογές τις πλάκας κάνω. Καλύτερα να πώ στον προιστάμενό μου ότι πετάει τα χρήματά του στο project που είμαι :)&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34316.aspx</link><pubDate>Wed, 15 Aug 2007 01:44:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34316</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34316.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34316</wfw:commentRss><description>&lt;P&gt;Φίλε μου τραβάς κανα ζόρι με τους σερβιτόρους?&lt;BR&gt;Τεσπα....&lt;BR&gt;Δεν θα σχολιάσω παραπάνω το ύφος της απάντησης... για το 2. Όταν θα γίνεις manager εσύ, να τους στέλνεις να γίνονται σερβιτόροι!!!&lt;BR&gt;&lt;BR&gt;Για το 3 τώρα, το να πιστεύεις αυτά που πιστεύεις περί Ap Servers και performance σε σχέση με St Procs... τι να πω... δικαίωμα σου, άλλοστε εφαρμογές τις πλάκας υπάρχουνε πολλές! Ειδικά με το να επιχειρηματολογείς λέγοντας "Σήμερα η τάση είναι...", σαν να είναι ας πούμε της μόδας, αν μη τι άλλο δεν με πείθεις. Φυσικά ίσως δεν σε ενδιαφέρει να με πείσεις... απλά στο λέω μιας και έκανες τον κόπο και ασχολήθηκες με το post μου.&lt;BR&gt;Το αν κάνω μεγάλο λάθος ή όχι, να μου επιτρέψεις να μην σε αφήσω να το αναφέρεις αναπάντητο:&lt;BR&gt;Η δική μου η εμπειρία δεν βασίζεται σε... "τάσεις", αλλά σε πραγματικές εφαρμογές σε εταιρίες&amp;nbsp;(Logistics / WMS - όχι 1 ή 2 αλλά πολύ περισσότερες από 10) που διαχειρίζονται αρκετές χιλάδες transaction ανά ημέρα. &lt;BR&gt;Αν εσύ πιστεύεις οτι δεν πρέπει να χρησιμοποιείς St.Proc επειδή ο Server δεν χρησιμοποιείται για αυτό που κάνει καλύτερα... και φορτώνεις τη λογική σου σε App.Servers και παραπάνω layers!!... τότε μάλλον το μεγάλο λάθος δεν βρίσκεται σε εμένα!&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;PS: Θα εκτιμούσα επίσης αν&amp;nbsp;κατέβαζες λίγο τους τόνους&amp;nbsp;στις επόμενες απαντήσεις σου- αν υπάρξουν,... διαφορετικά άστο διότι δεν πρόκειται να ξανασχοληθώ&amp;nbsp;γιατί δεν υπάρχει και λόγος. &lt;BR&gt;Απλά χάνεται το νόημα του forum να ανεβάζουμε τους τόνους χωρίς κανέναν &lt;STRONG&gt;απολύτως&lt;/STRONG&gt; λόγο.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34312.aspx</link><pubDate>Tue, 14 Aug 2007 23:58:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34312</guid><dc:creator>sakalis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34312.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34312</wfw:commentRss><description>Θα σχολιάσω τα 2 τελευταία. &lt;br&gt;&lt;br&gt;2. Αν δε γνωρίζει τι είναι τα Foreign keys καλύτερα να γίνει σερβιτόρος στην ταβέρνα της γειτονιάς του. Αλήθεια σε ποια σχολή πέρασε το μάθημα βάσης δεδομένων????&lt;br&gt;&lt;br&gt;3. Δηλαδή αν έχεις το business logic σε εναν application server και χρησιμοποιείς την database μόνο για crud πέφτει το perfomance, από το να υλοποιείς τα πάντα με Stored procedures στον database server?Κάνεις μεγάλο λάθος. Σήμερα η τάση είναι να χρησιμοποιώ τον Database server μονο για αυτό που κάνει καλύτερα, να διαχειρίζεται δεδομένα, ενώ τα υπόλοιπα ανεβαίνουν επίπεδο, και υλοποιούνται στο business layer.&lt;br&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34311.aspx</link><pubDate>Tue, 14 Aug 2007 23:48:19 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34311</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34311.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34311</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;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;P&gt;Γιατί κάνεις join με τον Inserted? Άσε που το join με τον inserted, δεν περιλαμβάνει τον inserted. Αφού θέλεις να αλλάξεις τις εγγραφές που έχουν την παλιά τιμή, αρκεί το join με τον deleted. &lt;/P&gt;
&lt;P&gt;Σχετικά με το τί είναι πιο εύκολο για ένα νέο προγραμματιστή, τί πιστεύεις? Ότι θα κοιτάξει ποιά foreign keys υπάρχουν στη βάση, ή ότι θα φανταστεί ότι μπορεί να χρησιμοποιούνται triggers? Και γιατί triggers, και να μην είναι όλος ο κώδικας στην εφαρμογή? &lt;/P&gt;
&lt;P&gt;Όπως και να έχει, αυτό που περιγράφεις είναι μία πολύ "ιδιαίτερη" περίπτωση. Έχω περάσει από τέτοιες "ιδιαίτερες" καταστάσεις, όπου κανείς πλέον δεν θυμόταν γιατί δεν είχαν βάλει κλειδιά! Εμείς όμως έπρεπε να ξεσκαρτάρουμε τα δεδομένα κάθε φορά που τύχαινε κάποιες συναλλαγές να έχουν "παλιούς" κωδικούς&amp;nbsp; ... (Γιώργο, τα θυμάσαι ?)&lt;/P&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Ωχ.... πολύ όμορφη κουβέντα αλλά μου έβαλες πολλά θέματα μαζί χε χε.... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;...&lt;/P&gt;
&lt;P&gt;Λοιπόν...&lt;/P&gt;
&lt;P&gt;1ον. Κάνω Join με το Inserted γιατί απλά θέλω την τιμή i.ProductID για να την βάλω στον άλλο πίνακα...&amp;nbsp; πώς αλλιώς να το κάνω... δεν νομίζω οτι γίνεται!!&lt;/P&gt;
&lt;P&gt;2ον. Πιστεύω οτι ένας προγραμματιστής δεν θα φανταστεί καν αν έχουν οριστεί foreign keys στη βάση (και πολλές φορές δεν γνωρίζει τι σημαίνει αυτό!! - πίστεψέ με!!)&lt;/P&gt;
&lt;P&gt;3ον. Ποτέ στην εφαρμογή τέτοιος κώδικας... για πάρα πολλούς λόγους! Ένας από αυτούς είναι το Performance.&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34306.aspx</link><pubDate>Tue, 14 Aug 2007 22:16:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34306</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34306.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34306</wfw:commentRss><description>&lt;P&gt;Γιατί κάνεις join με τον Inserted? Άσε που το join με τον inserted, δεν περιλαμβάνει τον inserted. Αφού θέλεις να αλλάξεις τις εγγραφές που έχουν την παλιά τιμή, αρκεί το join με τον deleted. &lt;/P&gt;
&lt;P&gt;Σχετικά με το τί είναι πιο εύκολο για ένα νέο προγραμματιστή, τί πιστεύεις? Ότι θα κοιτάξει ποιά foreign keys υπάρχουν στη βάση, ή ότι θα φανταστεί ότι μπορεί να χρησιμοποιούνται triggers? Και γιατί triggers, και να μην είναι όλος ο κώδικας στην εφαρμογή? &lt;/P&gt;
&lt;P&gt;Όπως και να έχει, αυτό που περιγράφεις είναι μία πολύ "ιδιαίτερη" περίπτωση. Έχω περάσει από τέτοιες "ιδιαίτερες" καταστάσεις, όπου κανείς πλέον δεν θυμόταν γιατί δεν είχαν βάλει κλειδιά! Εμείς όμως έπρεπε να ξεσκαρτάρουμε τα δεδομένα κάθε φορά που τύχαινε κάποιες συναλλαγές να έχουν "παλιούς" κωδικούς&amp;nbsp; ... (Γιώργο, τα θυμάσαι ?)&lt;/P&gt;</description></item><item><title>Απ: Περι Triggers...</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/34305.aspx</link><pubDate>Tue, 14 Aug 2007 21:46:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:34305</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/34305.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=34305</wfw:commentRss><description>&lt;P&gt;O λόγος οτι θέλω να αποφύγω κάτι τέτοιο είναι λίγο πιο.... πεζός...&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Έχω ένα έργο του οποίου η Βαση δεν έχει καθλολου constrains τέτοιου τύπου.&amp;nbsp;&amp;nbsp;&lt;BR&gt;Ότι constrain&amp;nbsp;υπάρχει ειναι μέσα σε&amp;nbsp;triggers,... και η διαδικασία να αλλάξω αυτη τη λογική απλά "σκοντάφτει" σε κάποια γραφειοκρατικά θέματα που θα με καθυστερήσουν.&lt;BR&gt;&lt;BR&gt;Επέτρεψε μου να διαφωνήσω στο οτι η αλλαγή της τιμής μέσω trigger είναι περισσότερο "Cryptic" απ' οτι η αλλαγή μέσω Cascade, εδικά για&amp;nbsp;κάποιον άπειρο programmer....&amp;nbsp; &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/P&gt;
&lt;P&gt;Για το deleted:&lt;BR&gt;Κάνοντας ακόμα ένα join με το deleted... πρέπει νομίζω να τα "σπάσεις" τα updates....&amp;nbsp;κάτι σαν το παρακάτω:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';mso-ansi-language:EL;mso-fareast-font-family:'Times New Roman';mso-fareast-language:EL;mso-bidi-language:AR-SA;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;ALTER&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;TRIGGER&lt;/SPAN&gt; Products_TestTrigger &lt;SPAN style="COLOR:blue;"&gt;ON&lt;/SPAN&gt; [dbo]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Products]&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="COLOR:blue;"&gt;FOR&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;UPDATE&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;AS&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Tahoma','sans-serif';mso-ansi-language:EL;mso-fareast-font-family:'Times New Roman';mso-fareast-language:EL;mso-bidi-language:AR-SA;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;if &lt;O:P&gt;UPDATE(&lt;FONT color=#808080&gt;RetailPrice&lt;/FONT&gt;)&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;O:P&gt;begin&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;UPDATE&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Products_Extention&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SET&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;FONT color=#808080&gt;&lt;SPAN style="COLOR:gray;"&gt;WholePrice = i.RetailPrice - (i.RetailPrice * 0.15)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;FROM&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Products_Extention pe&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;INNER&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; inserted i &lt;SPAN style="COLOR:blue;"&gt;ON&lt;/SPAN&gt; i&lt;SPAN style="COLOR:gray;"&gt;.ProductID&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt; pe&lt;SPAN style="COLOR:gray;"&gt;.ProductID&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="COLOR:gray;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;O:P&gt;end&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="COLOR:gray;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;O:P&gt;&lt;/P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;if UPDATE(&lt;FONT color=#808080&gt;ProductID&lt;/FONT&gt;)&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;O:P&gt;begin&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;UPDATE&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Products_Extention&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SET&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;FONT color=#808080&gt;ProductID =&amp;nbsp;&lt;FONT color=#000000&gt;i&lt;/FONT&gt;&lt;SPAN style="COLOR:gray;"&gt;.ProductID,&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;FROM&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Products_Extention pe&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;O:P&gt;&lt;FONT color=#808080&gt;&lt;SPAN style="COLOR:gray;"&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;INNER&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt;&lt;FONT color=#000000&gt; deleted&amp;nbsp;d &lt;/FONT&gt;&lt;SPAN style="COLOR:blue;"&gt;ON&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&amp;nbsp;d&lt;/FONT&gt;&lt;SPAN style="COLOR:gray;"&gt;.ProductID&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt;&lt;FONT color=#000000&gt; pe&lt;/FONT&gt;&lt;SPAN style="COLOR:gray;"&gt;.ProductID&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;INNER&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;JOIN&lt;/SPAN&gt; inserted i &lt;SPAN style="COLOR:blue;"&gt;ON&lt;/SPAN&gt; &lt;U&gt;d&lt;SPAN style="COLOR:gray;"&gt;.ProductID&lt;/SPAN&gt; &lt;SPAN style="COLOR:gray;"&gt;=&lt;/SPAN&gt; pe&lt;/U&gt;&lt;SPAN style="COLOR:gray;"&gt;&lt;U&gt;.ProductID&lt;/U&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="COLOR:gray;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;O:P&gt;end&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="COLOR:gray;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;O:P&gt;&lt;/P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/P&gt;&lt;/FONT&gt;το οποίο&amp;nbsp;"παίζει" μόνο&amp;nbsp;όταν κάνω Update 1&amp;nbsp;row&amp;nbsp;τη φορά!!&amp;nbsp;&lt;BR&gt;Αν προσέξεις το inserted γίνεται joined με κλειδί το d.ProductID από το deleted για αυτό και παίζει για 1 row, επειδή η συνθήκη join του inserted επιστρέφει TRUE και&amp;nbsp;εκείνη τη στιγμή στον inserted πίνακα η μόνη εγγραφή που&amp;nbsp;υπάρχει είναι αυτή που&amp;nbsp;θέλω - χε χε!! 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Νομίζω οτι γίνεται μόνο με την προσέγγιση του cascade... τελικά!&lt;/P&gt;</description></item></channel></rss>