<?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>Πρώτα Βήματα - Βάσεις δεδομένων</title><link>https://www.dotnetzone.gr:443/cs/forums/73/ShowForum.aspx</link><description>Για όσους κάνουν τα πρώτα τους βήματα στην Microsoft Access ή τον SQL Server, ή γενικότερα στη θεωρία βάσεων δεδομένων.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Functions Vs Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10515.aspx</link><pubDate>Fri, 10 Mar 2006 01:27:34 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10515</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10515.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=10515</wfw:commentRss><description>&lt;P&gt;Δεν είναι καθόλου άστοχη η ερώτηση σου. Η απάντηση είναι οτι φυσικά και μπορείς να τη χρησιμοποιήσεις με ένα τέτοιο τρόπο. Στα books online του SQL Server 2000 υπάρχει ένα σχετικό παράδειγμα το οποίο και αντιγράφω εδω:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In a user-defined function that returns a table: &lt;/P&gt;
&lt;P&gt;The RETURNS clause defines a local return variable name for the table returned by the function. The RETURNS clause also defines the format of the table. The scope of the local return variable name is local within the function.&lt;/P&gt;
&lt;P&gt;The Transact-SQL statements in the function body build and insert rows into the return variable defined by the RETURNS clause.&lt;/P&gt;
&lt;P&gt;When a RETURN statement is executed, the rows inserted into the variable are returned as the tabular output of the function. The RETURN statement cannot have an argument. &lt;BR&gt;No Transact-SQL statements in a function that returns a table can return a result set directly to a user. The only information the function can return to the user is the table returned by the function.&lt;/P&gt;
&lt;P&gt;This example creates a function in the Northwind database that returns a table:&lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;CREATE&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;FUNCTION&lt;/span&gt; LargeOrderShippers ( @FreightParm &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;money&lt;/span&gt; )&lt;br /&gt;RETURNS @OrderShipperTab &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;TABLE&lt;/span&gt;&lt;br /&gt;   (&lt;br /&gt;    ShipperID     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt;,&lt;br /&gt;    ShipperName   &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;nvarchar&lt;/span&gt;(80),&lt;br /&gt;    OrderID       &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt;,&lt;br /&gt;    ShippedDate   &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;datetime&lt;/span&gt;,&lt;br /&gt;    Freight       &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;money&lt;/span&gt;&lt;br /&gt;   )&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;AS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;INSERT&lt;/span&gt; @OrderShipperTab&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;SELECT&lt;/span&gt; S.ShipperID, S.CompanyName,&lt;br /&gt;               O.OrderID, O.ShippedDate, O.Freight&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;FROM&lt;/span&gt; Shippers &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;AS&lt;/span&gt; S &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;INNER&lt;/span&gt; &lt;span style="color: Silver;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;JOIN&lt;/span&gt; Orders &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;AS&lt;/span&gt; O&lt;br /&gt;              &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;ON&lt;/span&gt; S.ShipperID = O.ShipVia&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;WHERE&lt;/span&gt; O.Freight &amp;gt; @FreightParm&lt;br /&gt;   &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;RETURN&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;In this function, the local return variable name is @OrderShipperTab. Statements in the function body insert rows into the variable @OrderShipperTab to build the table result returned by the function.&lt;/P&gt;
&lt;P&gt;This query references the table returned by the function in its FROM clause:&lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;SELECT&lt;/span&gt; *&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;FROM&lt;/span&gt; LargeOrderShippers( $500 )&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Functions Vs Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10513.aspx</link><pubDate>Fri, 10 Mar 2006 00:53:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10513</guid><dc:creator>JohnieG</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10513.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=10513</wfw:commentRss><description>Ευχαριστώ για την γρήγορη και κατατοπιστική απάντηση!Δυστυχώς όμως μου γεννήθηκε ακόμη ένα ερώτημα...&lt;br /&gt;&lt;br /&gt;  Το παράδειγμα με την UDF στο select clause είναι κατανοητό. Πέρα από αυτό όμως έχω τη δυνατότητα να χρησιμοποιήσω μια table-valued UDF με ανάλογο τρόπο σε ένα from clause δεδομένου ότι, αν κατάλαβα καλά, θα μου επιστρέψει δεδομένα σε μορφή πίνακα; 'Η απλά είναι εντελώς διαφορετικό πράγμα μια table-valued function από έναν πίνακα;&lt;br /&gt;&lt;br /&gt;   Ζητώ προκαταβολικά συγγνώμη αν η ερώτηση μου είναι λιγάκι "άστοχη"...</description></item><item><title>Απ: Functions Vs Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10503.aspx</link><pubDate>Thu, 09 Mar 2006 20:49:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10503</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10503.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=10503</wfw:commentRss><description>&lt;P&gt;Καταρχήν καλωσήλθες! &lt;BR&gt;&lt;BR&gt;Τα queries της Access γενικά μπορούν να χρησιμοποιηθούν για δύο λόγους: &lt;BR&gt;&lt;BR&gt;- Ανάκτηση δεδομένων &lt;BR&gt;- Εισαγωγή, τροποποίηση ή διαγραφή δεδομένων. &lt;BR&gt;&lt;BR&gt;Στην περίπτωση της ανάκτησης, ο πιό σωστός τρόπος είναι να τα μετατρέψεις σε views. Βεβαια, αν τα queries έχουν κάποιο είδος "λογικής" (π.χ. βάσει μιας παραμέτρου φέρνουν αυτό ή εκείνο το result set), τότε θα ήταν ιδανικό να μετατραπούν σε stored procedures. &lt;BR&gt;&lt;BR&gt;Στις υπόλοιπες περιπτώσεις, αναμφισβήτητα οι stored procedures αποτελούν το αντίστοιχο των delete, update, insert queries της Access. &lt;BR&gt;&lt;BR&gt;Οσον αφορά στα functions τωρα: Τα user-defined functions ή UDFs εμφανίστηκαν στον SQL Server 2000 και ουσιαστικά μπορούν να ψιλοκάνουν αρκετά πράγματα από αυτά που κάνουν και οι stored procedures (εξ'ου και η σύγχυση η οποία δικολογημένα υφίσταται στο μυαλό σου). &lt;BR&gt;&lt;BR&gt;Από την άλλη μεριά, ο σκοπός των UDFs δεν είναι να αντικαταστήσουν τα stored procedures, αλλά να τα απλοποιήσουν. Μια UDF μπορεί να χρησιμοποιηθεί για να κάνει περίπλοκους υπολογισμούς με βάση κάποιες αρχικές τιμές και να επιστρέφει δύο πράγματα: Ειτε μια τιμή (σε κάποιο από τα γνωστά data types του SQL Server), ειτε ένα ολόκληρο in-memory table (οι λεγόμενες table-valued functions που επιστρέφουν τις λεγόμενες table variables) το οποίο μπορεί να χρησιμοποιηθεί σε joins κλπ. όπως οποιοδήποτε άλλο table, με τη διαφορά οτι εφόσον είναι στη μνήμη είναι σαφώς πίο γρήγορη οποιαδήποτε ενέργεια σε αυτό. &lt;BR&gt;&lt;BR&gt;Οι UDFs που επιστρέφουν μια συγκεκριμένη τιμή μπορούν να χρησιμοποιηθούν INLINE σε κάποιο SQL statement και εκεί έγκειται και η μεγάλη τους χρησιμότητα. Π.χ. δες το εξής (φανταστικό) παράδειγμα: &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;SELECT&lt;/span&gt; customer.id, customer.name, dbo.udfGetYearsToPension(customer.age) &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;from&lt;/span&gt; customer &lt;/span&gt;&lt;BR&gt;&lt;BR&gt;H dbo.udfGetYearsToPension δέχεται μια παράμετρο (λογικά, έναν αριθμό) και υπολογίζει τα χρονια που απομένουν μέχρι τη συνταξιοδότηση του πελάτη. Εσύ κάνεις ένα απλό select χρησιμοποιώντας τη UDF και παίρνεις το νουμεράκι. Αυτή, στο παρασκήνιο, μπορεί να κάνει select απο 10 πίνακες ακόμα και να κοιτάει σε ποιά κατηγορια επαγγέλματος βρισκεται ο πελάτης, πόσα ένσημα έχει, τι αλλες παράμετροι συντρέχουν που μπορεί να οδηγούν σε πιό πρόωρη συνταξιοδότηση, να συνυπολογίζει την ηλικία (η οποία περνάει στη UDF ως όρισμα ΓΙΑ ΚΑΘΕ γραμμή η οποία γίνεται select) και να σου δίνει το τελικό νουμεράκι. Ειναι προφανές οτι δεν μιλαμε απλά για μια calculated τιμή. &lt;BR&gt;&lt;BR&gt;Αν επιχειρούσες να το κάνεις αυτό με stored procedure, μπορεί να το πετύχαινες, αλλά θα ήταν πολύ πιό περίπλοκο. Από την άλλη μεριά μπορείς να φτιάξεις μια stored procedure που να χρησιμοποιεί αυτή τη UDF. &lt;BR&gt;&lt;BR&gt;Αυτή ειναι μόνο μια μικρή εισαγωγή - παράδειγμα. Γενικώς οι UDF επιτελούν βοηθητικό και όχι πρωταρχικό ρόλο, όπως οι stored procedures. Αν χρειάζεσαι περισσότερες πληροφορίες, εδώ είμαστε! &lt;BR&gt;&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Functions Vs Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/10464.aspx</link><pubDate>Wed, 08 Mar 2006 20:04:24 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:10464</guid><dc:creator>JohnieG</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/10464.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=10464</wfw:commentRss><description>&lt;P&gt;Καλημέρα,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; Έχω μπει στη διαδικασία μεταφοράς ενός project από MS Access σε SQL Server 2005 οπότε μου γεννήθηκε ο προβληματισμός τα ήδη υπάρχοντα queries&amp;nbsp;μου σε τι να τα μετατρέψω (???) . Απο τα λίγα που διάβασα δεν μπόρεσα να λάβω μια σαφή εικόνα για μια&amp;nbsp;ενδεδειγμένη τακτική καθώς τα περισσότερα άρθρα κατέληγαν στο ότι σε κάθε περίπτωση καλό είναι να δοκιμάζεις και τις δύο μεθόδους και να διαπιστώνεις ποια σε εξυπηρετεί καλύτερα.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Αυτό που θα ήθελα να ζητήσω είναι μια δεύτερη άποψη επί του θέματος καθώς κι ενδεχόμενα άρθρα&amp;nbsp;ή πηγές που θα μπορούσαν ίσως να με διαφωτίσουν περισσότερο. Επίσης φαντάζομαι πως μια καλή εναλλακτική θα ήταν η μετατροπή των queries σε views απλά εγω θα ήθελα να επικεντρώσω στις διαφορές μεταξύ Functions και Stored Procedures.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;Κάθε πληροφόρηση είναι ευπρόσδεκτη. Ευχαριστώ εκ των προτέρων....&lt;/P&gt;</description></item></channel></rss>