פונקציות
-
אשמח לעזרה.
מדוע יש לי כאן שגיאה?
(קיצצתי חלק גדול מהפונקציה. השגיאה כבר בהתחלה בIF שהוא מסמן קו אדום מתחת הIF).CREATE FUNCTION loginuser (@username VARCHAR(100), @dBname VARCHAR(100), @password VARCHAR(100),@usernametemp VARCHAR(100) output,@passtemp VARCHAR(100) output) RETURNS TABLE AS RETURN if exists (SELECT dbname from dbo.all_db WHERE (dbname = @dbname)) begin end GO פורסם במקור בפורום CODE613 ב21/07/2016 23:45 (+03:00)
-
ראשית, פונקציה ב SQL לא יכולה לקבל פרמטר של OUTPUT, זה נגד ההיגיון של פונקציה ב SQL באופן כללי.
שנית, לפונקציה שמחזירה טבלה ישנם שני סוגים, INLINE ו MULTILINE.
INLINE אומר שאין לך שום יכולת לכתוב קוד בתוך הפונקציה, פרט למשפט SELECT בודד, ואז אתה פטור מלהגדיר מפורשות את רשימת העמודות מראש (היא עדיין תקובע בעת יצירת הפונקציה גם אם תשים כוכבית ב SELECT).
MULTILINE נותן לך את האפשרות לכתוב קוד בפנים אבל דורש ממך להגדיר בדיוק אלו עמודות יהיו בטבלה, אתה יצרת INLINE ומנסה לכתוב קוד בפנים, וזאת השגיאה שאתה רואה.שלישית, אין כלום בין ה BEGIN ל END שזאת שגיאה בפני עצמה, אם אין לך כעת מה לשים תדחוף PRINT או משהו בלתי מזיק בסגנון.
רביעית, הייתי ממליץ לך להשתמש בדוגמה מוכנה של פונקציה מתוך ה TEMPLATE EXPLORER שקיים ב SSMS, או להוריד דוגמה מהאינטרנט ולשנות אותה עד שתדע לכתוב לבד.
פורסם במקור בפורום CODE613 ב22/07/2016 01:31 (+03:00)
-
[quote="softs"]ראשית, פונקציה ב SQL לא יכולה לקבל פרמטר של OUTPUT, זה נגד ההיגיון של פונקציה ב SQL באופן כללי.
אז איך מקבלים תשובה מפונקציה כזו?
פורסם במקור בפורום CODE613 ב22/07/2016 01:34 (+03:00)
-
בכלל אני חושב שבשביל מה שאתה עושה יש store procedure.
http://code.613m.org/viewtopic.php?t=230.פורסם במקור בפורום CODE613 ב22/07/2016 06:17 (+03:00)
-
האם אני יכול מתוך Multi-Statement Function לעשות אינסרטים לטבלה שלא בתוך הפונקציה?
פורסם במקור בפורום CODE613 ב22/07/2016 10:57 (+03:00)
-
תודה.
כשאני יוצר פרוצודורה, היכן אני יכול לגשת אליה (לא להפעלה, אלא לדוגמא ברמת חלון הSSMS ועוד)פורסם במקור בפורום CODE613 ב22/07/2016 14:33 (+03:00)
6/8