שמוש בשם "file" כשם שדה בms-sql

שמוש בשם "file" כשם שדה בms-sql

*** השאלה נשאלה גם בפורום "מומחי IT" ***


האם באופן כלשהו אפשר להשתמש במילים file key trigger כשמות שדה בטבלה של ms-sql?

גוגל הביא אותי לתשובה עבור from (להוסיף סוגריים מרובעים), אבל הפתרון הזה לא עבד על file.

לחליפין - מה מילות המפתח הנכונות לחיפוש? (ניסיתי את "using reserved names as fields title microsoft sql" וכמה אפשרויות דומות (כולל המילה file), ולא נמצא פתרון.

הבעיה - יישום די גדול בו משתמשים בבסיס נתונים postgreSQL, כשאחד הלקוחות דורש שנעבוד מול MS-SQL-SERVER, ואני מנסה לשמור על תאימות במבנה בסיס הנתונים (כדי לחסוך אפשרויות ל"הפתעות" ביישום במקומות שונים). היישום מבוסס ברובו על web2py.
 

נתן.ל

New member
על פי ניסיוני - כן

אמנם כשתשתמש בSSMS הוא יצבע לך אותם בצבעים עליזים, אבל מגרסה 2008 הוא אמור לאכול את זה.


*אם מישהו מהמומחים חולק עלי, אני אשמח ללמוד
 

נתן.ל

New member
תיקון

מילים שמורות אכן יכולות לשמש כשם עמודה אבל הפנייה אליהן צריכה להיות עם סוגריים מרובעות [file]
אבל זה לא ישנה את הפלט
 
ניסיתי זאת:

...גוגל הביא אותי לתשובה עבור from (להוסיף סוגריים מרובעים), אבל הפתרון הזה לא עבד על file....

הטבלאות מיוצרות תוך שמוש בdal של web2py. זה עובד עם חלק מהשמות (ניתן ליצור טבלא עם שדה בשם [from], אבל לא עבד לי על חלק מהשמות שקיימים בבסיס הנתונים הנוכחי.



למסור ד"ש לחבר'ה בתא"ר?
 
הקשה הוא שגם from לא יכול לשמש כשם שדה

בלי ה"טריק" הזה, וחלק מהבעיה הוא שאני משתמש בdal של web2py, שככל הנראה עושה "עבודה נוספת"... (זה מה שקורה כש"יורשים" קוד).

אנסה עוד משהו ביום א', ואם לא יעבוד, פשוט אשכתב את השמות ולעזזאל עם התאימות.
 

pitoach

New member
הסברון קצר

1. אין בעיה לעשות שימוש במילים כאלה כשם טבלה אם אתה מאוד רוצה ליצור מערכת ברמה מאוד נמוכה ועם הרבה מאוד פוטנציאל לבעיות
מאוד לא מומלץ!!!
שמות של אלמנטים זה חלק מרכזי מארכיטקטורה של מערכת שמפתחים (קוד שכותבים או מסד נתונים ובכלל)!

2. זה לא "טריק" אלא פשוט כתיבה נכונה. שמות צריכים להיות על פי הכתיבה התקנית בתוך סוגריים מרובעים תמיד (או מרחאות בהתאם לשרת ול GUI). זה שאנחנו מתעצלים, זה רק מתוך... כן עצלנות. וכמובן העובדה שהשרת מאפשר לנו לנו את זה.
יותר מכך כתיבה נכונה צריכה להיות תמיד בעזרת שמות בשלוש או ארבע רמות! גם בזה אנחנו מתעצלים וגם זה יכול להוביל לטעויות.
כתיבה בארבע חלקים היא כתיבה מהצורה:
ServerName.DatabaseName.DatabaseOwner.TableName
* DatabaseOwner זה גם שם הסכמה בשם אחר.
כתיבה בשלוש חלקים היא ללא החלק של השם שרת.
כתיבה בלי שם הסכמה (כתיבה ב 2 חלקים) מהווה טעות ואינה כתיבה תיקנית (אם כי כולנו מבצעים זאת, ותמיד אפשר לזרוק "את מי מענין התקן").
זה נושא לדיון ארוך וכדאי לקרוא עליו ברשת.

כל מה שאתה מחפש בנושא נמצא בקישור הבא:
http://technet.microsoft.com/en-us/library/ms176027(v=sql.105).aspx
והסיכום הוא:

When QUOTED_IDENTIFIER is set to ON, SQL Server follows the ISO rules for the use of double quotation marks (")and the single quotation mark (') in SQL statements. For example:
* Double quotation marks can be used only to delimit identifiers. They cannot be used to delimit character strings.
* Single quotation marks must be used to enclose character strings. They cannot be used to delimit identifiers.
When QUOTED_IDENTIFIER is set to OFF, SQL Server uses the following rules for single and double quotation marks:
* Quotation marks cannot be used to delimit identifiers. Instead, brackets have to be used as delimiters.
* Single or double quotation marks can be used to enclose character strings.
Delimiters in brackets can always be used, regardless of the setting of QUOTED_IDENTIFIER
 

nitzos1

New member
אפשר, אבל למה ?!!!!

לא טוב
לא מומלץ
מכניס את המערכות לסחרור
מעכיר את הכתיבה
מבלבל את הצופים
תכלס
למה ?????
 
תשובה קצרה (חזרה על משהו שכתבתי בהתחלה)

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

nitzos1

New member
הבנתי

מה אגיד לך
אם אתה מתחזק, האם יש לך יכולת לשנות את השמות "השמורים" במקור.
באמת ניתן להתשמש בשמות שמורים בתוך סוגריים מרובעות
כמו
אבל מתשהוא (ברגע הפחות נוח ומתאים) זה יצוף ויפריע.
אני מבדר על Best Practices לא על החוקים היבשים.
אבל שוב יש צורך למסגר את השמות בסוגריים מרובעות, כך שלא בטוח שהכל יעבור חלק ל- SQL -Server
ואם כבר אתה מזכיר את postgresql
איך הוא עובד ?
 
יש לי יכולת לשנות הכל.

הבעיה היא לא להפיל לקוחות קיימים בעדכוני גרסה (לכן אני "מתעקש" לשמור על תאימות, יתכן שהפתרון יהיה שכתוב עם flag בהתאם לבסיס הנתונים איתו עובדים, ותיעוד שאין אפשרות להחליף בסיס נתונים קיים). מיסגור בסוגריים מרובעים "לא עובר" דרך web2py (זה הframework איתו עובדים אצלנו).

בקשר לpostgres - ההתקנה לפעמים עושה בעיות כאשר מותקנים על המחשבים אנטיוירוסים מסויימים (תסריט ההתקנה משתמש בvbs, יש אנטיוירוסים שחוסמים ע"י שינויים בregistery של המחשב כל אפשרות להשתמש בשפה זו). אין לי השוואות מול ms-sql, אבל מול אורקל הביצועים בסדרי גודל הרבה יותר טובים על המערכת שלנו. כמובן שהוא נהנה משלל הייתרונות של קוד פתוח.
 

nitzos1

New member
אם לא עובד, אז לא עובד

אין יותר שאלה
הסוגריים המרובעים הם כלי של SQL-Server להתמודד עם הסוגייה של שמות שמורים
אם לא עובד לך, אז אין לך ברירה אלה לא להשתמש בשמות שמורים ב-SQL-SERVER
אני מבין היטב את החשש שלך לגבי שינויים בשמות והמשמעות לגבי לקוחות קיימים
אבל
שמות שמורים הם בכוונה שמורים ולא מומלץ להשתמש בשום פלטפורמה
אז
ממליץ לך בחום להסיר אותם גם מהבסיס הנתונים הקיים ו"לסבול" הצרות קטנות של תאימות

אבל זה המלצה שלי מהמקום שלי
בהצלחה
שמוליק ב
 
למעלה