<?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>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2461.aspx</link><pubDate>Sat, 04 Jun 2005 09:04:08 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2461</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2461.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2461</wfw:commentRss><description>&lt;p align="justify"&gt;&lt;font face="Georgia" size="2"&gt;Ναι, μιλάω για το row-level security.&lt;br /&gt;&lt;br /&gt;Παναγιώτη, το match&amp;nbsp;1 χρήστη με 1 RoleID δεν αποτελεί πραγματικότητα.&amp;nbsp;H ιεραρχία μέσω&amp;nbsp;Roles, Subroles και User groups για την γρήγορη κατανομή, είναι πιο ρεαλιστικός τρόπος. Μόνο εδώ στο forum το match του χρήστη με το ποιο forum μπορεί να δει, κάνει post, να στείλει ένα αρχείο μαζί με το μήνυμα, είναι πολύ πιο πολύπλοκο.&lt;br /&gt;&lt;br /&gt;Το RowID, AllowedUserID, AlllowedRowID μπορεί να φαίνεται καλός συνδιασμός, αλλά δεν δουλεύει για ν-δυναμικό αριθμό χρηστών, Πως θα υλοποιηθεί; Θα κάνω ένα "trigger" μέσα στην βάση ή στο Bussiness layer και θα&amp;nbsp;προσθέτω μια εγγραφή κάθε φορά που μπαίνει μια εγγραφή μέσα στον πίνακα; Και όταν αλλάξω τα δικαιώματα σε ένα χρήστη προσθέτωντας&amp;nbsp;ή αφαιρώντας&amp;nbsp;ένα Role θα εξετάζω όλα τα δικαιωματά του; Δημιουργώ ένα forehead load που δεν χρειάζεται. &lt;br /&gt;&lt;br /&gt;Συνήθως χρησιμοποιήται ένα store procedure, που εκτελεί ένα role παρόμοιο με την Oracle, που ουσιαστικά είναι μια λίστα από IDs&amp;nbsp;που εφαρμόζονται μέσα από ένα IN στο WHERE.&lt;br /&gt;&lt;br /&gt;George J.&lt;br /&gt;&lt;/p&gt;&lt;/font&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2430.aspx</link><pubDate>Fri, 03 Jun 2005 17:01:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2430</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2430.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2430</wfw:commentRss><description>&lt;p&gt;Άυτό δεν το κατάλαβα. Security οριζόντια εννοείς μάλλον το row-level security. Πώς δένει αυτό με το string από IDs? Και τί εννοείς ο "default" τρόπος?&lt;br /&gt;&lt;br /&gt;Για την ιστορία, η Oracle υποστηρίζει row-level security αλλά στην ουσία κάνει join τα RowIDs κάθε πίνακα με ένα "function" το οποίο ελέγχει τα permissions. Αν αυτά είναι απλά UserID, RoleID θα μπορούσε άνετα να κάνει join με ένα πίνακα που θα περιέχει RowID, AllowedUserID, AllowedRowID. Ο πίνακας αυτός μπορεί να περιέχει πολλές εγγραφές, αλλά δεν μας πειράζει. Μια DB τα πάει πολύ καλά με πολλές εγγραφές φτάνει να έχουν indexes. &lt;br /&gt;&lt;br /&gt;Παρόμοια λύση είχα εφαρμόσει και &lt;a target="_blank" title="/forums/ShowPost.aspx?PostID=1078" href="/forums/ShowPost.aspx?PostID=1078"&gt;σε αυτή την περίπτωση&lt;/a&gt;, μόνο που εκεί έπαιζαν και ιεραρχικά permissions (ιεραρχικά ανά business unit, ρόλο), τα οποία συμμετείχαν σε όλα τα queries που επιστρέφανε πληροφορίες στο χρήστη (δηλαδή σε grid, show και edit φόρμες).&lt;/p&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2424.aspx</link><pubDate>Fri, 03 Jun 2005 02:21:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2424</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2424.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2424</wfw:commentRss><description>&lt;p align="justify"&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/forums/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;pkanavos wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;Δηλαδή, πραγματικά χρειάζεται να περάσεις τόσες τιμές?&lt;br /&gt;&lt;br /&gt;&lt;img alt="Indifferent" src="/forums//emoticons/emotion-8.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Αποπληξία!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Στην περίπτωση αυτή επιβάλεται το ID να είναι primary key. Ίσως μάλιστα να πρέπει να χρησιμοποιηθεί και temporary table αν οι τιμές είναι πάρα πολλές. Εδώ πλέον μιλάμε για τρελές, εξωτικές λύσεις. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;br /&gt;&lt;font face="Georgia" size="2"&gt;Μην αγχώνεσαι! &lt;img src="/forums//emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br /&gt;&lt;br /&gt;Μπορεί&amp;nbsp;ο Σωτήρης να έχει πάρει το θέμα από την ελαφριά του μεριά. Ο μηχανισμός όμως αυτός, είναι ο "default" τρόπος, για να μπορέσουμε να εφαρμόσουμε security οριζόντια μέσα σε ένα πίνακα. Δεν είναι και τόσο "εξωτικός", αν μιλάμε για μεγάλη βάση.&lt;br /&gt;&lt;br /&gt;Δηλαδή αν δεις ένα statement&amp;nbsp;που ταυτόχρονα κάνει apply οριζόντια και κάθετα security σε ένα πίνακα, τι θα πεις; Οτι θα εξολοθρεύσει κάποιος τα resources του SQL Server; Δεν είναι σχεδιασμένη η μηχανή να κάνει optimize τέτοια statements; &lt;br /&gt;&lt;br /&gt;Όταν ο σκοπός πρέπει να επιτευχτεί, νομίζω ότι όλα τα άλλα έρχονται σε δεύτερη μοίρα.&lt;br /&gt;&lt;br /&gt;George J.&lt;br /&gt;&lt;/p&gt;&lt;/font&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2416.aspx</link><pubDate>Fri, 03 Jun 2005 01:14:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2416</guid><dc:creator>γιωργος μπακογιαννης</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2416.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2416</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="EL" style="FONT-SIZE: 12pt"&gt;&lt;font face="Times New Roman"&gt;Εγώ θα έλεγα το έχεις:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;span lang="EL" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EL; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;br /&gt;Όταν ένας άνθρωπος μας ανοίγει μια πόρτα μην ψάχνουμε κάθε δυνατό τρόπο για να την κλίσουμε&lt;br /&gt;&lt;br /&gt;&lt;img src="/forums//emoticons/emotion-50.gif" alt="Broken Heart" /&gt;&lt;/span&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2408.aspx</link><pubDate>Thu, 02 Jun 2005 22:51:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2408</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2408.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2408</wfw:commentRss><description>&lt;p&gt;Η αλήθεια είναι οτι δεν...σκαμπαζα πολλά από το θέμα των merge joins (και θέλω να πάρω και το 70-229 τρομάρα μου)! Διαβασα όμως λιγάκι στα γρήγορα και το βρήκα ενδιαφέρον. Θα το κοιτάξω καλύτερα, ευχαριστώ για την χρήσιμη παρατήρηση!&lt;br /&gt;&lt;/p&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2407.aspx</link><pubDate>Thu, 02 Jun 2005 22:24:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2407</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2407.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2407</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Λοιπόν, θα μπορούσες να βάλεις ένα έλεγχο στο stored procedure για τον αριθμό των ID που προκύψανε. Αν είναι πολύ μεγάλος θα μπορούσες να χρησιμοποιήσεις το ίδιο query με hint για merge join. Προσοχή όμως, το merge join είναι γρηγορότερο μόνο αν και οι δύο στήλες που συμμετέχουν είναι ταξινομημένες με τον ίδιο τρόπο. Αλλιώς τις ταξινομεί με αποτέλεσμα να καθυστερεί περισσότερο.&lt;br /&gt;&lt;br /&gt;Έχε το κι αυτό υπόψη να το χρησιμοποιήσεις αν εμφανιστεί η ανάγκη&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2406.aspx</link><pubDate>Thu, 02 Jun 2005 22:13:06 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2406</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2406.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2406</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Να διορθώσω: Αυτό που εννοώ λέγοντας οτι είναι αξια λόγου η λύση, είναι ακριβώς για αυτές τις "εξωτικές" καταστάσεις. Οχι, δεν το χρειάζομαι, ισως και να μην το χρειαστώ, σε περίπτωση όμως που θα το χρειαστώ ξέρω και ΤΙ χρειάζεται να κάνω και ΤΙ θα μου κοστίσει αυτό που θα κάνω...&lt;br /&gt;&lt;br /&gt;Προσωπικά είμαι κατά των λύσεων-μπαλωμάτων και είμαι ο πρώτος που τις πολεμάει όσο μπορεί. Αλλά ορισμένες φορές, είναι do or die...και (αν και ξέρω οτι θα με βαρέσετε για αυτο που θα πω) θεωρώ οτι μερικές φορές έχει και καλό λόγο να είναι έτσι.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2405.aspx</link><pubDate>Thu, 02 Jun 2005 22:02:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2405</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2405.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2405</wfw:commentRss><description>Δηλαδή, πραγματικά χρειάζεται να περάσεις τόσες τιμές?&lt;br /&gt;&lt;br /&gt;&lt;img src="/forums//emoticons/emotion-8.gif" alt="Indifferent" /&gt;&lt;br /&gt;&lt;br /&gt;Αποπληξία!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Στην περίπτωση αυτή επιβάλεται το ID να είναι primary key. Ίσως μάλιστα να πρέπει να χρησιμοποιηθεί και temporary table αν οι τιμές είναι πάρα πολλές. Εδώ πλέον μιλάμε για τρελές, εξωτικές λύσεις.</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2404.aspx</link><pubDate>Thu, 02 Jun 2005 21:50:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2404</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2404.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2404</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Βρε Πανο, δεν τα ξαναλέγαμε; Μερικές φορές δεν είναι στο χέρι μας...υπάρχουν ακραίες περιπτώσεις που αυτό *πρεπει* να γίνει (επέμβαση σε ήδη υπάρχοντα πράγματα, quick fixes ωσπου να βρεθεί χρόνος για κάτι πιό optimized, κλπ).&lt;br /&gt;&lt;br /&gt;Δεν είναι η καλύτερη λύση αλλά σε ορισμένες περιπτώσεις (τονίζω το "ορισμένες"), αποτελεί πιστεύω λύση.&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2403.aspx</link><pubDate>Thu, 02 Jun 2005 21:46:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2403</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2403.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2403</wfw:commentRss><description>Παιδιά, μήπως ξεφύγαμε? Πόσες τιμές θέλετε να περάσετε στο string? Το varchar χωράει 1600 τετραψήφιους αριθμούς, σκέφτεστε σοβαρά να περάσετε τόσους? &lt;br /&gt;&lt;br /&gt;Άσε που αν περάσεις τόσους αριθμούς, το nested join που θα χρησιμοποιήσει ο optimizer θα είναι ααααρρρργγγγγγόοοοοοοο! Μία λύση θα ήταν να κάνεις το ID Primary Key για να μπορέσει ο optimizer&amp;nbsp;να χρησιμοποιήσει κάποιο άλλο join, π.χ. merge,&amp;nbsp;αλλά και πάλι, ξεφύγαμε!&lt;br /&gt;&lt;br /&gt;Από την άλλη, αμφιβάλλω αν μπορεί να γίνει πιο optimized η fn_&lt;font face="Tahoma" size="2"&gt;TableFromDelimitedString. Απλά, η T-SQL σε αυτή την έκδοση δεν είναι η κατάλληλη γλώσσα για να παίζεις με strings. &lt;br /&gt;&lt;br /&gt;Ax, πότε θα μπει στην T-SQL και ένα array type!&lt;/font&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2399.aspx</link><pubDate>Thu, 02 Jun 2005 18:55:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2399</guid><dc:creator>γιωργος μπακογιαννης</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2399.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2399</wfw:commentRss><description>&lt;img src="/forums//emoticons/emotion-21.gif" alt="Yes" /&gt;&lt;img src="/forums//emoticons/emotion-21.gif" alt="Yes" /&gt;&lt;img src="/forums//emoticons/emotion-21.gif" alt="Yes" /&gt;&lt;img src="/forums//emoticons/emotion-21.gif" alt="Yes" /&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2395.aspx</link><pubDate>Thu, 02 Jun 2005 17:56:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2395</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2395.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2395</wfw:commentRss><description>Σωστό! Ακόμα καλύτερο! &lt;br /&gt;Εγώ να είσαι σίγουρος οτι θα το αξιοποιήσω &lt;img src="/forums/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2394.aspx</link><pubDate>Thu, 02 Jun 2005 17:50:33 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2394</guid><dc:creator>raPhaeL</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2394.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2394</wfw:commentRss><description>&lt;pre class="source"&gt;&lt;font face="Tahoma" size="3"&gt;&lt;span style=""&gt;Λίγο &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;unoptimized&lt;/span&gt;&lt;span style=""&gt; , χρησιμοποιεί &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;TEXT&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;Datatype&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;αντί για &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;VARCHAR&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;ώστε να ξεπεράσει το μόνιμο πρόβλημα με το &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;limitation&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;του &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;varchar&lt;/span&gt;&lt;span style=""&gt;(8000) . &lt;br /&gt;Από την άλλη το &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;TEXT&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;είναι λίγο δύσχρηστο στα &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;assignments&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;( Δεν μπορείς να ορίσεις &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;local&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;μεταβλητές ) αλλά αν το περνάς από &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;SP&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;παίζει μια χαρά . &lt;br /&gt;Στη θέση του &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;TEXT&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;μπορείτε βέβαια να περάσετε και &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;VARCHAR&lt;/span&gt;&lt;span style="" lang="EN-US"&gt; &lt;/span&gt;&lt;span style=""&gt;απλά θα περάσουν &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;max&lt;/span&gt;&lt;span style=""&gt;. 8000 χαρακτήρες.&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;table border="0" cellspacing="0" width="100%"&gt;&lt;tr&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey" width="15"&gt;&lt;/td&gt;&lt;td bgcolor="lightgrey"&gt;&lt;br&gt;&lt;font face="Lucida Console, Courier" size="2"&gt;&lt;/pre&gt;&lt;font face="Tahoma" size="2"&gt;CREATE Function dbo.fn_TableFromDelimitedString (@string TEXT,@delimiter VARCHAR(10)=',' ) &lt;br/&gt; RETURNS @Table TABLE (Id INT)&lt;br/&gt; AS&lt;br/&gt; BEGIN&lt;br/&gt; &lt;br/&gt; DECLARE @Found &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;INT&lt;br/&gt; DECLARE @FoundEnd &amp;nbsp;&amp;nbsp; &amp;nbsp;INT&lt;br/&gt; DECLARE @Id&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;INT&lt;br/&gt; &lt;br/&gt; IF DATALENGTH(@string)&amp;gt;0 BEGIN&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;SET @Found=1&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;SET @FoundEnd=0&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;WHILE @FoundEnd&amp;lt;DATALENGTH(@string)&amp;nbsp; BEGIN&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SET @FoundEnd=CHARINDEX(@delimiter,SUBSTRING(@string,@Found,DATALENGTH(@string)),0)&lt;br/&gt; &lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;IF @FoundEnd = 0 BEGIN&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SET @FoundEnd=DATALENGTH(@string)+1&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;END&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SET @Id=SUBSTRING(@string,@Found,@FoundEnd-1) &amp;nbsp;&lt;br/&gt; &lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;INSERT INTO @Table VALUES(@ID) &lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SET @Found=@Found+@FoundEnd&lt;br/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;END&lt;br/&gt; &lt;br/&gt; END&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br/&gt; &lt;br/&gt; RETURN &lt;br/&gt; &lt;br/&gt; END&lt;/font&gt; &lt;br/&gt; &lt;pre class="source"&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/pre&gt; &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre class="source"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2392.aspx</link><pubDate>Thu, 02 Jun 2005 17:11:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2392</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2392.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2392</wfw:commentRss><description>&lt;p&gt;Μη σε απασχολεί τόσο το πρόβλημα της απόδοσης. Ο optimizer θα πάρει τον πίνακα με τις τιμές και θα κάνει ένα nested join, δηλαδή για κάθε τιμή που επιστρέφει η CsvToInt, θα ψάξει τον mytable. Αυτό θα έκανε έτσι κι αλλιώς αν έκανες join με ένα άλλο πίνακα με λίγες εγγραφές αντί για το function. &lt;br /&gt;&lt;br /&gt;Αυτό που παίρνει ελάχιστη βελτίωση είναι το patindex. Επειδή εδώ δεν ψάχνεις για κάποιο pattern μπορείς να χρησιμοποιήσεις το charindex. Επειδή όμως το string που που περνάς είναι συνήθως μικρό, δεν θα δεις καμμία διαφορά.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description></item><item><title>Re: Δυναμικό WHERE IN() χωρίς δυναμικη SQL</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2391.aspx</link><pubDate>Thu, 02 Jun 2005 15:45:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2391</guid><dc:creator>axaros</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2391.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2391</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Όντως ενδιαφέρον ...&lt;br /&gt;Μπράβο !!!&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item></channel></rss>