בעיות בחישוב ממוצעים

29/05/2014

מעשה בעובד חרוץ ודייקן שבנה טבלה, איכלס אותה בנתונים, ורצה לחשב ממוצע.מחמת דייקנותו המופלגת בחר בסוג נתון (Decimal(38,37, כלומר- ספרת יחידות אחת משמאל לנקודה ו-37 ספרות מימין למקודה.למה נדרשת רמת דיוק כזו – אין לדעת: אולי רצה לדעת מה חלקה של בני ברק באותו קב של יופי שהתחלק בין כל הערים בעולם לאחר שירושלים נטלה לעצמה 9 מתוך 10 שירדו לעולם (א-פרופו יום ירושלים שחל אתמול)? אולי רצה לחשב כמה זמן עובר מרגע שהרמזור התחלף לירוק ועד שנשמעת צפירתו חסרת הסבלנות של הנהג הישראלי הממוצע שמאחוריו (א-פרופו ממוצעים..)? מה שלא יהיה – ניצור טבלה ונאכלס אותה: Create Table...
תגיות: ,
אין תגובות

מנגנון לתיקון טקסטים

28/05/2014

הפוסט הזה מתפרסם בעקבות שאלה שהתפרסמה בפורום בספרדית:נתונה טבלת כתובות datos#,יש טבלה נוספת עם מילים שגויות incorrecto#,וטבלה עם חלופות תקינות correcto#;ויש להחליף בטבלת הכתובות את המילים השגויות בתקינות.מכיוון שבין שתי הטבלאות האחרונות יש יחס של 1:1 אני הייתי שומר אותן בטבלה אחת בת שתי עמודות: מילה שגויה, חלופה תקינה; וחוסך אי הבנות.בנוסף- זיהוי מילים בטקסט (להבדיל מתתי מחרוזות) זה אתגר בפני עצמו שהרחבתי לגביו בעבר, וכאן נניח שכל מופע של תת מחרוזת שגויה יש להחליף בחלופה תקינה מבלי לברר אם מדובר במילה שלמה או לא. כיצד נעשה זאת? ניתן ליצור Join בין טבלת הכתובות לשתי הטבלאות האחרות בה ליד...
תגיות: , ,
אין תגובות

הוספה והסרה של קבצים מהדטבייס

12/05/2014

כברירת מחדל- לכל דטבייס יש קובץ דטה (נתונים)mdf וקובץ לוג ldf, אם כי ניתן להוסיף עוד קבצי נתונים (ndf) וקבצי לוג, לקנפג אותם (קצב גידול, גודל מקסימלי..) וכו’.קבצי הנתונים מאורגנים ב-FileGroups, כאשר ברירת המחדל היא FileGroup אחד בשם Primary, אך בהתאם לצורך ניתן ליצור עוד.הפוסט הקצרצר הזה הוא לגבי אופן הוספת והסרת קבצי נתונים ולוג מדטבייס קיים, בלי להתעמק בכל מיני חומרות של best practices..ניצור דטבייס חדש: Use master;Go If (Select Count(*) From sys.databases Where name='MyDB')>0 Drop Database MyDB;Go Create Database MyDB;Go נציץ בטבלאות המערכת כדי לראות איך כל זה נראה: Select *...
תגיות: ,
אין תגובות

קינון טרנזקציות

08/05/2014

איכשהו היה ברור לי עד לאחרונה ש-SQL Server אינו תומך בקינון טרנזקציות, ושהאופציה של פתיחת טרנזקציה כשאחרת כבר פתוחה באותו Session – זו אחיזת עיניים, מכיוון שלא משנה מה נעשה – אם נכתוב Rollback – כל הטרנזקציות יתבטלו באותו רגע ויסגרו; ומכאן שאו שעושים לכל הטרנזקציות Commit או שעושים לכולן Rollback, אך לא ניתן גם וגם סלקטיבית.ובכן- מתברר שלא כך. כלומר- נכון ש-Rollback בודד יסגור את כולן, אך זה אינו ראייה לשום דבר, וצריך לדעת איך עובדים עם טרנזקציות מקוננות, ולתאם ציפיות מראש.במקרה הפשוט בו אני פותח טרנזקציה, בתוכה טרנזקציית משנה, בתוכה טרנזקציית משנה-משנה וכך הלאה; מעדכן פה ומשנה...
אין תגובות

שינוי Collation של שרת

07/05/2014

ה-Collation שמגדיר את אופן הטיפול והתמיכה בסוגי כתב שונים (לטיני, עברי, סיני..), מוגדר ברמת השרת, ברמת הדטבייס, ברמת העמודה בטבלה, וברמת ה-Session.חשיבות ההגדרה ברמת השרת חשובה בעיקר עבור ה-tempdb והטבלאות הזמניות הנוצרות בו: נכון שניתן להגדיר בטבלאות זמניות Collation כרצוננו, אך אם לא עשינו כן – ברירת המחדל תהיה זו של הדטבייס שבמקרה זה היא זו של השרת; וכתוצאה מכך – דטבייס שעבד באופן “ידידותי” עם ה-tempdb בשרת אחד, יתחיל לזרוק הודעות שגיאה בשרת אחר בו ה-Collation שלהם שונים ונעשה שימוש בטבלאות זמניות.מה עושים אם לא רוצים להתחיל לשנות את הקוד בדטבייס ולהוסיף לכל פקודות יצירת הטבלאות הזמניות הגדרות...
תגיות: , ,
אין תגובות

פקודות Attach ו-Detach לדטבייסים

05/05/2014

השימוש ב-Attach ו-Detach מקובל כחלק מפעולות כמו תחזוקת שרת, שדרוג שרת, שכפול של דטבייס לשרתים אחרים (בדרך כלל- שכפול חד פעמי בניגוד לרפליקציה) ועוד.ברוב המקרים עדיף להשתמש בגיבוי ושחזור, אבל למקרה הצורך- מדריך קצר כיצד לעשות זאת בקלות: בעיקר כשיש הרבה דטבייסים כשלכל אחד מספר קבצים, או סתם – כשאין כח להתחיל לחפש בגוגל דוגמאות כיצד עושים זאת (או ליתר דיוק- גיגלנו והגענו לפוסט הזה..).נתחיל מהסוף- כיצד יוצרים פקודות    attach לכל הדטבייסים (לאחר שננתק אותם מהשרת כבר אי אפשר יהיה לעשות זאת): Declare @S Varchar(Max);With T As(Select Row_Number() Over(Partition...
תגיות: , , ,
תגובה אחת