<?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>Απ: SQL Error message details</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/71445.aspx</link><pubDate>Sun, 21 Oct 2012 17:58:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:71445</guid><dc:creator>serakar</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/71445.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=71445</wfw:commentRss><description>Ευχαριστώ και πάλι, θα χρησιμοποιήσω κάτι από τα παραπάνω.&lt;br&gt;</description></item><item><title>Απ: SQL Error message details</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/71431.aspx</link><pubDate>Wed, 17 Oct 2012 22:31:26 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:71431</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/71431.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=71431</wfw:commentRss><description>&lt;div&gt;Δεν υπάρχει πιο λεπτομερές μήνυμα. Αν το σκεφτείς από τη μεριά της βάσης μάλιστα δεν έχει και νόημα, καθώς τα δεδομένα που θα εισαχθούν είναι αποτέλεσμα ενός query και έτσι δεν υπάρχει πλέον η έννοια της "γραμμής". Μπορεί να είναι αποτέλεσμα join, αριθμητικών πράξεων, aggregations.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Θα μπορούσε ίσως η βάση να σου επιστρέφει τη γραμμή που δεν μπόρεσε να εισάγει αλλά αυτό θα κόστιζε πάρα πολύ. Ο λόγος είναι ότι από τη στιγμή που υπάρχει σφάλμα το INSERT πρέπει να αποτύχει. Το execution plan ενός query μπορεί να είναι αρκετά περίπλοκο και το σημείο στο οποίο γίνεται η μετατροπή από το ένα precision στο άλλο σχεδόν σίγουρα είναι πολύ πριν το βήμα της εγγραφής των δεδομένων. Αντί να υπολογίζει δεδομένα τα οποία έτσι κι αλλιώς θα πετάξει, η βάση απλά διακόπτει το execution χωρίς να προσπαθήσει να δημιουργήσει τις τελικές γραμμές.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Πρώτα πρέπει να καταλήξεις στο τί θα κάνεις με τα δεδομένα που δεν μπορούν να μεταφερθούν και μετά θα βρεις άκρη, καθώς αυτό το stored procedure θα πρέπει να τρέχει συνέχεια και ίσως να χειρίζεται τέτοιες περιπτώσεις κάθε φορά. Αν θεωρείς ότι οι αρχικές εγγραφές είναι "λάθος" θα πρέπει να διορθώσεις τα δεδομένα. &amp;nbsp;Αν οι εγγραφές πρέπει να αποκλειστούν, θα πρέπει να φτιάξεις ένα query που θα κόβει τις εγγραφές με τιμή μεγαλύτερη από την επιτρεπόμενη.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αν θέλεις να ψάξεις ποιές είναι οι προβληματικές εγγραφές θα πρέπει να χρησιμοποιήσεις queries σαν αυτό που πρότεινε ο Βασίλης. Εγώ βέβαια θα πρότεινα κάτι σαν το&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;select&lt;/span&gt; * &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;from&lt;/span&gt; table_a
&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;where&lt;/span&gt; &lt;span style="color:Fuchsia;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;log10&lt;/span&gt;(column_a)&amp;gt;3&lt;/span&gt;&lt;/pre&gt;γιατί η LEN επιστρέφει το μήκος του string, αλλά για τη βάση δεν έχει ουσιαστική διαφορά.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Μπορείς επιπλέον να χρησιμοποιήσεις τις πληροφορίες που υπάρχουν για τις στήλες στο INFORMATION_SCHEMA.COLUMNS view για να δεις ποιές εγγραφές δεν μπορούν να μερθούν από μία στήλη σε μία άλλη:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;select&lt;/span&gt; * &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;from&lt;/span&gt; table_a
&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;where&lt;/span&gt; &lt;span style="color:Fuchsia;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;log10&lt;/span&gt;(column_a)&amp;gt;
	(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;select&lt;/span&gt; NUMERIC_PRECISION - NUMERIC_SCALE 
		&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;from&lt;/span&gt; INFORMATION_SCHEMA.COLUMNS
		&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;where&lt;/span&gt; TABLE_NAME=&lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;'table_b'&lt;/span&gt; 
			&lt;span style="color:Silver;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;and&lt;/span&gt; DATA_TYPE=&lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;'numeric'&lt;/span&gt;
			&lt;span style="color:Silver;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;and&lt;/span&gt; COLUMN_NAME=&lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;'column_b'&lt;/span&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;</description></item><item><title>Απ: SQL Error message details</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/71429.aspx</link><pubDate>Wed, 17 Oct 2012 21:22:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:71429</guid><dc:creator>serakar</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/71429.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=71429</wfw:commentRss><description>Ευχαριστώ και τους δύο.&lt;br&gt;&lt;br&gt;Παναγιώτη δεν κατάλαβα τι εννοείς για την γραμμογράφηση, εγώ πάντως όταν λέω γραμμογράφηση εννοώ τους τύπους και τα μήκη των πεδίων, δεν ξέρω αν είναι άλλη η κατάλληλη λέξη, ούτε βέβαια είπα ότι τα δεδομένα είναι προβληματικά.&lt;br&gt;&lt;br&gt;Καλοί οι εναλλακτικοί τρόποι που προτείνετε και μάλλον εκεί θα καταλήξω, απλά να σιγουρέψω πρώτα ότι δεν υπάρχει τρόπος να πάρεις παραπάνω πληροφορίες για το error του τρόπου που ήδη χρησιμοποιώ, μια και αυτό θα ήταν το καλύτερο για την περίπτωσή μου.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: SQL Error message details</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/71428.aspx</link><pubDate>Wed, 17 Oct 2012 20:33:47 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:71428</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/71428.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=71428</wfw:commentRss><description>Να πω κι εγώ ότι δεν μιλάμε για "γραμμογράφηση". &amp;nbsp;Δεν μπορείς να χειριστείς πίνακες λες και είναι εγγραφές σε αρχεία. Τα δεδομένα δεν είναι προβληματικά, είτε στον ένα είτε στον άλλο πίνακα και συνεπώς δεν μπορείς να πεις ότι θα βρεις κάπως το "λάθος". Αν προσπαθείς να περάσεις μεγάλες τιμές σε μικρό πεδίο κάποιες θα σκάσουν αναγκαστικά.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Η μία λύση προφανώς είναι αυτό που προτείνει ο Βασίλης, να ελέγξεις την τιμή όλων των εγγραφών πριν ξεκινήσεις (όχι απαραίτητα με αυτό το statement).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Υποψιάζομαι όμως ότι χρησιμοποιείς λάθος εργαλείο. Αν θέλεις να μεταφέρεις τακτικά δεδομένα μεταξύ πινάκων που διαφέρουν καλύτερα είναι να χρησιμοποιήσεις ένα SSIS transformation το οποίο θα μεταφέρει τα δεδομένα από τον ένα πίνακα στον άλλο και θα στέλνει τα προβληματικά δεδομένα μέσω του error output σε κάποιο τρίτο πίνακα ή log αρχείο.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Απ: SQL Error message details</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/71427.aspx</link><pubDate>Wed, 17 Oct 2012 20:05:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:71427</guid><dc:creator>bull</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/71427.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=71427</wfw:commentRss><description>Καλησπέρα, &lt;/br&gt;
 ίσως για διαγνωστικούς λόγους να πάιξεις με την FLOOR() και την LEN() ώστε να δεις ποιά records έχουν πάνω από το επιθυμητό ακέραιο μέρος.
&lt;/br&gt;
πχ. &lt;/br&gt;&lt;/br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;SELECT * FROM table_a WHERE LEN(FLOOR(col_a)) &gt; 3 &lt;/b&gt;
&lt;/br&gt;&lt;/br&gt;
θα πρέπει να σου επιστρέψει όλες τις εγγραφές που έχουν μεγαλύτερο ακέραιο μέρος από 3 ψηφία.</description></item><item><title>Απ: SQL Error message details</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/71426.aspx</link><pubDate>Wed, 17 Oct 2012 19:04:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:71426</guid><dc:creator>serakar</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/71426.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=71426</wfw:commentRss><description>&lt;br&gt;Ευχαριστώ για την απάντηση, αλλά νομίζω ότι χρειάζομαι κάτι διαφορετικό, γιατί εγώ δεν έχω data στο table_b, προσπαθώ να εισάγω και χτυπάει ο λάθος, και φυσικά δεν κάνει την εισαγωγή.&lt;br&gt;&lt;br&gt;Το πρόβλημα το έχω ήδη βρει, αλλά με πολύ ψάξιμο οπτικά στα data του table_a.&amp;nbsp; Ο λόγος που παρουσιάστηκε ήταν ότι στο table_a το πεδίο x ήταν decimal(7,2), στο table_b ήταν decimal(5,2) και σε ένα από τα 20000 records το πεδίο στο table_a είχε τιμή που δεν χώραγε στο πεδίο του table_b.&amp;nbsp; Το πρόβλημα είναι ότι τέτοιες 'ασυμβατότητες' μεταξύ πεδίων υπάρχουν πολλές και οι πίνακες δεν μπορούν να αλλάξουν γραμμογράφηση ούτε από την μία πλευρά ούτε από την άλλη.&amp;nbsp; Οπότε αναγκαστικά όποτε παρουσιάζεται πρόβλημα (είμαστε ακόμα σε test) πρέπει να διερευνηθεί και να αποφασιστεί πως θα αντιμετωπιστεί (συνήθως μέσω της εφαρμογής που γεμίζει το table_a).&lt;br&gt;&lt;br&gt;Αυτό που θέλω εγώ είναι να μπορώ 'εύκολα' να βρω σε ποιο από τα 20000 records υπάρχει πρόβλημα και σε ποιο από τα 5-10 πεδία του αρχείου με την παραπάνω 'ασυμβατότητα'.&amp;nbsp; Να μου πει π.χ. ότι το πεδίο Χ στο record 14567 δεν μπορεί να εισαχθεί, να μου δώσει την αξία που δεν μπορεί να εισαχθεί, κάτι τέλος πάντων για να μην χρειάζεται να ψάχνω όλα τα data να δω τι χτυπάει.&lt;br&gt;&lt;br&gt;Ευχαριστώ και πάλι.&lt;br&gt;</description></item><item><title>Απ: SQL Error message details</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/71425.aspx</link><pubDate>Wed, 17 Oct 2012 18:19:02 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:71425</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/71425.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=71425</wfw:commentRss><description>Δώσε λίγο περισσότερα στοιχεία για το λάθος. Απ' ό,τι βλέπω, το Arithmetic overflow μπορεί να το το πάρεις για για conversion από &lt;a href="http://www.sql-server-helper.com/error-messages/msg-8115-numeric-to-varchar.aspx"&gt;numeric σε varchar&lt;/a&gt;. Επίσης, υπάρχει ένα command line utility που μπορείς να χρησιμοποιήσεις για να βρεις τις διαφορές μεταξύ δύο πινάκων (&lt;a href="http://msdn.microsoft.com/en-us/library/ms162843%28v=sql.100%29.aspx"&gt;tablediff&lt;/a&gt;). Κάποιο καλό παιδί μας λυπήθηκε κι έφτιαξε &lt;a href="http://sqljana.wordpress.com/2010/12/09/tablediff-exe-compare-two-tables-and-generate-insertupdatedeletes/"&gt;gui &lt;/a&gt;γι' αυτό. Δεν το έχω χρησιμοποιήσει, αλλά νομίζω ότι γνωρίζοντας που διαφέρουν οι δύο πίνακες θα είναι πιο εύκολο να αναγνωρίσεις το πεδίο στο οποίο εμφανίζεται το σφάλμα. Αν δεν το βρεις στο directory "C:\Program Files\Microsoft SQL Server\90\COM\TableDiff.exe", κοίταξε και στο Program Files (86x).&lt;br&gt;</description></item><item><title>SQL Error message details</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/71424.aspx</link><pubDate>Wed, 17 Oct 2012 16:43:25 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:71424</guid><dc:creator>serakar</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/71424.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=71424</wfw:commentRss><description>Καλημέρα&lt;br&gt;&lt;br&gt;Έχω μία stored procedure που επιλέγει κάποια data από διάφορους πίνακες και τα εισάγει σε κάποιον άλλο.&amp;nbsp; Έχει δηλαδή μια εντολή δηλαδή του τύπου (απλοποιημένη):&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;INSERT&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;INTO&lt;/span&gt; table_b &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;SELECT&lt;/span&gt; a, b, c, d, e, f, g, h &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;FROM&lt;/span&gt; table_a&lt;br&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br&gt;Αυτό λοιπόν κάποιες φορές, επειδή τα πεδία των δύο πινάκων δεν είναι ακριβώς ίδια, επιστρέφει error.&amp;nbsp; Πχ. "Arithmetic overflow error converting numeric to data type numeric." χωρίς καμία παραπάνω πληροφορία.&amp;nbsp; Αυτό που θέλω είναι περισσότερες λεπτομέρειες για το τι ακριβώς δημιουργεί το πρόβλημα, δηλαδή ποιο record και ποιο πεδίο.&amp;nbsp; Υπάρχει κάποιος τρόπος να πάρω αυτή την πληροφορία?&amp;nbsp; Ο server είναι 2008 και χρησιμοποιώ το Management studio.&lt;br&gt;&lt;br&gt;Ευχαριστώ&lt;br&gt;&lt;br&gt;</description></item></channel></rss>