שואל שוב על SP ו-Uniqe..

שואל שוב על SP ו-Uniqe..

באמצעות return אפשר להחזיר ערך ב-SP, אבל המגבלה היא שהערך שה-SP מחזירה יהיה מספרי
execute @iReturn = sp_SomeSP​
אני בעצם צריך דרך להחזיר לתוכנית את המזהה של השורה שהוספתי/עדכנתי אם המזהה הוא מסוג int למשל אז אין בעיה, אבל אם הוא Uniqe אז הוא מחרוזתי, ואי אפשר להחזיר כזה ערך. חשבתי שאחרי ביצוע הקוד אני אגדיר משפט select שבו ישלף המזהה של השורה החדשה/השורה שעדכנתי בביצוע של ה-SP ב-Managment Studio אכן נשלפת שורה, אבל בביצוע בקוד, כשאני ניגש ל-Recordset יש שגיאה בקוד: הוא טוען שהאובייקט (Recordset) סגור
 

s h i m s h o n

New member
על איזה DB מדובר?

שאלת בעבר, וכבר אז שאלתי אותך. באיזה DB מפתח UNIQUE של טבלה חייב להיות מחרוזתי? זה מנוגד להגיון. באורקל, למשל, קיימת אפשרות ל- MERGE שמבצע INSERT או UPDATE לפי הצורך. בכל מקרה, בתוך ה-SP ניתן לשים את ערך המפתח (חדש או קיים) לתוך משתנה לפני הפעולה, ובסיום להחזיר את תוכן המשתנה. בברכה, ש.
 
SQL Server

המפתח של הטבלה הוא מסוג Uniqueidentifier כי יש צורך לעבוד Offline עם מסד הנתונים ואז למזג את השורות החדשות לטבלה המדוברת, בזמן שהטבלה המקורית ממשיכה לקבל נתונים מהתוכנית. המטרה היא לא להשתמש ב-int כי אז יכולים להיווצר ערכים כפולים
 
לא צריך להשתמש בreturn value

אתה יכול להשתמש בoutput parameter, שמחזיק את הערך שקיבלת מהפונקציה newid. בניגוד לreturn value, שמוגבל למספר שלם בלבד, output parameter יכול להחזיק נתונים מסוג אחר.
 
ואיך זה מתבצע בפועל?

תודה לשניכם על התשובות והזמן בכל מקרה האם התכנון הזה שגוי? לי זה דווקא נראה בסדר..
 
דוגמא

create proc MyProc (@id uniqueidentifier output) as set @id = newid() --Do insert here. Use @id instead of using newid go declare @id uniqueidentifier exec MyProc @id output select @id​
שים לב, שבנוסף להגדרה של הפרמטר, כoutput, גם בזמן הפעלת הSP, אחרי כתיבת שם הפרמטר מופיע המילה output. התכנון עצמו שהSP יחזיר לך את המפתח הוא לא בעייתי. יכול להיות שהשימוש בuniqueidentifier מיותר (לא יכול לדעת, כי אני לא מכיר את המערכת).
 
וואו 6 בבוקר..

אבל תודה שאתה עונה... מה שנתת לא עובד, שוב השגיאה היא שה-Recordset סגור.. שמתי לב שבמקרים כאלה, אם ה-SP מבצעת insert אז לא מתבצע כלום אחריה.. אני עובד עם ASP (עם JS צד שרת אם זה משנה), שמעתי על שיטה של ה-Recordset שנקראת NextRecordset. קשור אולי?
 
למעלה