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

 

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

Επιστροφή τιμής από Function

Îåêßíçóå áðü ôï ìÝëïò mkoukou. Τελευταία δημοσίευση από το μέλος spaceman στις 05-08-2006, 20:38. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-08-2006, 15:13 15516

    Επιστροφή τιμής από Function

    Έχω την εξής function

    ALTER FUNCTION FN_SELECT_ContactsNewID (@Contacts_BranchID SMALLINT)

    RETURNS NVARCHAR(12)

    AS

    BEGIN

    DECLARE @Contacts_ID NVARCHAR(12)

    DECLARE @Max_Contacts_Line INT

    DECLARE @Cnt_Contacts INT

    SELECT @Max_Contacts_Line = MAX(Contacts_Line) FROM Contacts WHERE Contacts_BranchID = @Contacts_BranchID

    SELECT @Cnt_Contacts = COUNT(Contacts_Line) FROM Contacts WHERE Contacts_BranchID = @Contacts_BranchID

    IF @Cnt_Contacts = 0 SELECT @Max_Contacts_Line = 1 ELSE SELECT @Max_Contacts_Line = @Max_Contacts_Line + 1

    DECLARE @strBranchID NVARCHAR(3)

    SELECT @strBranchID = REPLACE(STR(@Contacts_BranchID, 3), ' ', '0')

    DECLARE @strLine NVARCHAR(8)

    SELECT @strLine = REPLACE(STR(@Max_Contacts_Line, 8), ' ', '0')

    SELECT @Contacts_ID = @strBranchID + '-' + @strLine

    RETURN (@Contacts_ID)

    END

    Όταν κάνω Step Into Function βλέπω ότι το @Contacts_IDπαίρνει μία τιμή της μορφής 001-00000001. Αυτή είναι και η τιμή που θέλω.

    Όταν όμως τελειώσει η διαδηκασία και κοιτάζω το παράθυρο Output μου επιστρέφει το εξής:

    Return Value

    ------------

    001-00

    η οποία είναι και λάθος.

    Επίσης όταν καλώ τη συγκεκριμένη function από κώδικα της Visual basic 2005 με τον εξής τρόπο:

    Dim a As String = CStr(cmDB.ExecuteScalar)

    μου επιστρέφει τιμή Nothing.

    Μπορεί κάποιος να μου πει τι κάνω λάθος.

    Ευχαριστώ

  •  05-08-2006, 16:49 15519 σε απάντηση της 15516

    Απ: Επιστροφή τιμής από Function

    Για το πρώτο σκέλος, δοκιμάζοντας διάφορα, το μόνο που μπόρεσα να παρατηρήσω είναι οτι η τιμη τύπου 001-00 που παίρνεις είναι 6 χαρακτήρες, ενώ επιθυμείς 12. Ο τύπος nvarchar είναι double-byte. Μήπως κάπου στην πορεία όταν καλείς την function την αναθέτεις σε varchar(12) και όχι σε nvarchar(12);
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  05-08-2006, 17:02 15520 σε απάντηση της 15516

    Απ: Επιστροφή τιμής από Function

    Όχι δεν γίνεται αυτό. Πολεμάω να εντοπίσω που είναι το πρόβλημα και δεν καταλαβαίνω γιατί ενώ η variable @Contacts_ID έχει την σωστή τιμή τελικά μου επιστρέφει λάθος.

    Τέλος πάντων. Επειδή με κούρασε αυτό μόλις τώρα τελείωσα μια StoredProcedure με @Contacts_ID OUTPUT κι επίλυσα το πρόβλημα.
  •  05-08-2006, 20:38 15538 σε απάντηση της 15516

    Απ: Επιστροφή τιμής από Function

    Εφοσον, το string που επιστρεφει η function αποτελειται μονο απο αριθμους και εναν χαρακτηρα '-', δεν ειναι απαραιτητο να επιστρεφει NVARCHAR.

    ALTER FUNCTION FN_SELECT_ContactsNewID (@Contacts_BranchID SMALLINT)

    RETURNS VARCHAR(12)

    AS

    BEGIN

    DECLARE @Contacts_ID VARCHAR(12)

    DECLARE @Max_Contacts_Line INT

    --return NULL, for NULL input or when length of user input is greater than 3 digits

    IF @Contacts_BranchID IS NULL OR LEN(@Contacts_BranchID) > 3

    RETURN

    --get maximum contacts line of specified Branch

    SELECT @Max_Contacts_Line = ISNULL(MAX(Contacts_Line), 0) + 1

    FROM Contacts

    WHERE Contacts_BranchID = @Contacts_BranchID

    -- leading 0's on Branch id + '-'+ leading zeros on maximum contacts line

    SELECT @Contacts_ID = REPLICATE('0', 3- LEN(@Contacts_BranchID)) +CAST(@Contacts_BranchID AS VARCHAR)+ '-'+ REPLICATE('0', 8- LEN(@Max_Contacts_Line)) + CAST(@Max_Contacts_Line AS VARCHAR)

    RETURN @Contacts_ID

    END

    Εκτελεση του παρακατω query:

    'select dbo.FN_SELECT_ContactsNewID(1)' απο την VB και ελεγξε το αποτελεσμα...

    --ΗΤΗ--

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems