SQL SERVER 2005: system function

תילס

New member
SQL SERVER 2005: system function

הי

אני רוצה להוסיף פונקציות (ופרוצדורות) מערכת לSQL SERVER
איך עושים זאת?
או
האם יש לכם הפניה לאיזשהו מדריך טוב, כי לא מצאתי ברשת?

לדוג' פונקציית NewDate
שמקבלת 3 פרמטרים מסוג int : @year,@month,@day
ומחזירה datetime

אני רוצה שהיא תהיה לי זמינה בכל הdatabases שעל השרת.

תודה רבה!!!
 

pitoach

New member
גוגל לא מצא?

אתה יכול להתחיל כאן:

http://www.functionx.com/sqlserver/Lesson09.htm
* אם יש לך זמן מאוד מומלץ לעבור על כל המדריך. זה אחד המדריכים הכי מושקעים שאני ראיתי באינטרנט (הכל מלווה בתמונות ובסגנון צעד אחרי צעד).
http://www.functionx.com/sqlserver/index.htm
מצד שמאל יש הקישורים למדריך וכדאי להתחיל משיעור 1 כמובן
 

pitoach

New member
תתעלם מהתשובה שלי
לא שמתי לב שאתה מדבר

על פונקייצת מערכת וזה מה שמעניין אותך ולא החלק של כיצד לייצר את הפונקציה
 

תילס

New member
הרבה מעבר לתרומה צנועה

תודה רבה על המאמר המועיל
שאלות:
1 - אין תחיליות נוספות מלבד SP_?
כי זה קצת מוזר (לא נוח ולא ברור) לכתוב VIEW או TABLE עם תחילית SP_
2-מה קורה עם פונקציות סקלריות?
 

pitoach

New member
יש הרבה סוגי תחיליות וחשוב להבין

למשל XP מייצג extended procedures

פרוצדורות שלך לא כדאי לשים עם תחילית SP ויש על זה כמה בלוגים נחמדים ברשת (אני כרגע לא מדבר על פרוצדורות שאתה רוצה להפוך לפרוצדורות מערכת שאז זה דווקא יכול להתאים). במשפט אחד הדבר כיול לגרור חפיפה בין שמות ותוצאה של עבודה איטית בשל כך שהשרת מבצע חיפוש של הפרוצדורה במקומות הלא נכונים תחילה (ב מיקום של פרוצדורות מערכת למשל)

* אני מציע לך לעבוד בפורט שלך
אני למשל בדרך כלל מתחיל בשם שלי _ אחר כך השם של האלמנט _ אחר כך אם צריך עוד נתון כמו סוג שחוזר
אין חובה לעבוד בפוןרמט כזה או אחר בפונקציות מערכת אבל שם נהוג בפרוצדורות להתחיל עם SP או XP למשל לפי העניין והתפקיד והסוג
 

תילס

New member
לא מגיע לך כרטיס

ברור שיש סוגים של תחיליות , הן המקובלות והן המומצאות.
אני רוצה תחיליות שיזוהו כפונקציות מערכת - אבל פונקציות לא פרוצדורות.
 

pitoach

New member
התחילית לא קובעת אם זה אלמנט מערכת


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

שים לב שהסברתי גם שאני עושה שימוש בתחיליות שלי וממליץ לעשות שמוש בתחיליות שלך. את הננעלת לכיוון התחיליות ולכן הנושא סטה מהשאלה המקורית. אז אם לא הובן טוב אני אדגיש שוב שאין קשר לתחילית ולסוג האובייקט בפועל או מי שקבע את השם לא פעל לפי השמות המקובלים

על מנת להפוך אובייקט לאובייקט מערכת נסה לעבוד לפי לפי המדריך של גרי (לא עברתי עליו אבל אני מניח מתוך קריאה של מדריכים אחרים שלו שהוא טוב) ואתה יכול לעבוד עם SP_MS_MarkSystemObject

את התשובה הזו גרי כבר כתב למעלה
 

pitoach

New member
תיקון טעות: השם לא מפריע לרישום כאלמנט מערכת

אבל הוא לא עובד בצורה מושלמת טוב אם השם לא נכון.

כשמריצים את השאילתה לבדוק אם הוא אלמנט מערכת מקבלים כן
SELECT NAME, IS_MS_SHIPPED
FROM SYS.OBJECTS
WHERE NAME = 'SP_GETOBJECTS'
GO
 

pitoach

New member
אם הבעיה היא רק בפונקציות אז אתה יכול תמיד

לגשת לפונקציה בשיטת השם המרובע
database->schema->fn_name

אני למשל בכלל לא אוהב להכניס דברים ב MASTER ולכן מחזיק מסד נתונים מיוחד לתוספות של פונקציות שונות כמו SPLIT.

אני נותן למסד הנתונים הזה הרשאות מתאימות לכל המשתמשים וניגש לכל פונקציה שלי מכל מסד נתונים

ראה דוגמה מלאה בקובץ טקסט מצורף
 

תילס

New member
תודה רבה! קניתי את הרעיון ליצור DB מיוחד!

ותודה מיוחדת גם על הקובץ המצורף.
 
למעלה