Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Ερώτηση για SQL query

Îåêßíçóå áðü ôï ìÝëïò pan. Τελευταία δημοσίευση από το μέλος agmarios στις 08-05-2007, 19:00. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-05-2007, 15:54 31601

    Ερώτηση για SQL query

    Καλησπέρα. Έχω ένα απλό sql query που όταν το τρέχω μου φέρνει τα ids ενός πίνακα. Φανταστείτε στην βάση pubs (Sql server 2000) να πω :  

    1
    2
    use pubs
    SELECT job_id FROM jobs

    Εγώ όμως θέλω όμως να φέρω όλα τα id σε μία στήλη σαν string του στυλ 1,2,3,4,5,6,7,... κτλ

    Το παρακάτω παίζει μια χαρά και το κάνει. ΟΜΩΣ αν κάνω σχόλιο την γραμμή 17 και βγάλω το σχόλιο από την 18, μου βγάζει error : Syntax error converting the varchar value '1,2,3,4,5,6,7,8,9,10,11,12,13,14,0' to a column of data type smallint.  Και είναι λογικό διότι τα είχα μετατρέψει όλα σε varchar. Πώς μπορεί να γίνει μόνο με χρήση SQL και οχι να καλέσω την γραμμή 18 από μια asp σελίδα ?? (γιατί με asp το παίρνει το έχω δοκιμάσει !)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    use pubs
    declare @jobId smallint, @ids varchar(8000), @zero smallint
    set @zero=0
    SET @ids =''

    DECLARE cCursor CURSOR LOCAL FOR
    SELECT job_id FROM jobs
    OPEN cCursor
    FETCH NEXT FROM cCursor INTO @jobId
    WHILE @@FETCH_STATUS=0
    Begin
      SET @ids = @ids + CAST(@jobId AS varchar(7)) + ','
      FETCH NEXT FROM cCursor INTO @jobId
    End
    CLOSE cCursor
    DEALLOCATE cCursor
    SET @ids = Replace(@ids, Char(39), '') + CAST(@zero AS varchar(7))
    SELECT @ids

    -- select * from jobs where (job_id IN (@ids))

     

    Ευχαριστώ

  •  08-05-2007, 16:23 31603 σε απάντηση της 31601

    Απ: Ερώτηση για SQL query

    Καθόλου "μια χαρά"! Όταν ο SQL Server υλοποιεί cursors έχει πολύ μεγάλο κόστος σε resources! Πρέπει να κάνεις το παν για να τους αποφύγεις καθώς ελάχιστα προβλήματα ΔΕΝ λύνονται με την set-oriented λογική του SELECT.

    Ξέχνα λοιπόν τους cursors και δες εδώ: http://www.dotnetzone.gr/cs/forums/thread/403.aspx

    Βάλε τον κώδικα σε μία stored procedure ή σε ένα UDF και κάλεσέ το απ' όπου θέλεις...

     


    Vir prudens non contra ventum mingit
  •  08-05-2007, 16:48 31604 σε απάντηση της 31603

    Απ: Ερώτηση για SQL query

    Εγώ πάλι δεν καταλαβαίνω γιατί όλη αυτή η φασαρία (εκτός αν το logic είναι πιό περίπλοκο και απλά εδώ βλέπουμε ένα prototype) και δεν κάνεις ένα

    SELECT * FROM jobs WHERE job_id in (SELECT...)

    Αλλά και πάλι, αν επιμένεις για τους δικούς σου λόγους να το κάνεις έτσι, μπορείς να γράψεις τη γραμμή 18 ως εξής (γράφω από μνήμης, ελπίζω να είναι σωστό):

    EDIT: Θα πρέπει να προσέξεις ωστε το μήκος του @ids να είναι μικρότερο από (8000- το μήκος του υπόλοιπου string).

    declare @sql varchar(8000)
    set @sql = ' SELECT * from jobs where job_id in (' + char(10) + @ids +char(10) +')'
    exec @sql

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  08-05-2007, 17:45 31605 σε απάντηση της 31604

    Απ: Ερώτηση για SQL query

    Είναι οδυνηρό αλλά μου συμβαίνει και μένα συχνά. Η χρήση cursors και loops συνήθως μαρτυρά την αδυναμία του developer να σκεφτεί με σύνολα (ή την τεμπελιά του, ή την έλλειψη χρόνου).

    cap:

    set @sql = ' SELECT * from jobs where job_id in (' + char(10) + @ids +char(10) +')'
    exec @sql


    Είσαι έτοιμος για το post περί execution plan?
  •  08-05-2007, 18:00 31606 σε απάντηση της 31605

    Απ: Ερώτηση για SQL query

    Μην μου φέρεις το post περι execution plan στο κεφάλι! :) Εγώ είπα και το δήλωσα, ΑΝ θέλει να συνεχίσει κατ' αυτό τον τρόπο!

    Ειναι που είναι ο κέρσορας, βάζουμε και το dynamic statement και το αποτελειώνουμε :) Εγώ ένιψα τας χειρας μου από την αρχή :)

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  08-05-2007, 19:00 31607 σε απάντηση της 31606

    Απ: Ερώτηση για SQL query

    εγώ δεν κάνω τέτοια πράγματα, άλλοι το έχουν σώσει στα favorites για να το έχουν εύκαιρο.
    Φόρα το κρόνος σου έρχονταιLightning
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems