mssql-scripter מחולל סקריפטים

יום חמישי, מאי 25, 2017

אני חושב שאת הגלגל הזה – כלים שיוצרים סקריפטים לדטבייסים על כל תכולתם, כבר המציאו מספר פעמים – מיקרוסופט וצד ג’, אז הנה עוד אחד לרשימה.. מדובר בכלי של מיקרוסופט ששוחרר זה עתה, ומתבסס על התקנה של Python (אפרופו הפוסט האחרון שלי), כך שמי שרוצה ואין לו – שיתקין. התקנה בחלון CMD: pip install mssql-scripter במחשב אחד זה רץ, נפל באמצע, הופעל שוב וגמר בהצלחה;ובמחשב אחר זה רץ בהצלחה ולא התעוררה כל בעייה. הפעלה לדוגמה בחלון CMD (פניה ל-Instance המקומי הראשי): mssql-scripter -S localhost -d MyDB > c:\tmp\MyScript1.sql אפשר גם כך (פנייה ל-Instance משני בשרת אחר ותיעוד הדטבייס כולל...
אין תגובות

הרצת קוד Python ב-SQL Server

יום שני, מאי 22, 2017

גרסת SQL Server 2017 שכעת עדיין זמינה רק בגרסת בטא (CTP 2.0 בשבילכם), כוללת תמיכה בפייתון (כעת עוד לא ב-Azure).בויקיפדיה מופיעה הפסקה הבאה (לקחת נשימה עמוקה): “פייתון היא שפה מרובת־פרדיגמות, המאפשרת תכנות מונחה-עצמים, תכנות פרוצדורלי, ובמידה מסוימת גם תכנות פונקציונלי. לשפה ספרייה סטנדרטית גדולה וענפה, והיא תומכת באופן מובנה בהרחבה שלה אל שפות אחרות (בתלות במפרש: C‏, ++C,‏ Java‏ ו־#C).” הבנתם? אז זהו שאני לא.. קצת שיחקתי עם פייתון לאחרונה, אני בוודאי לא המומחה שיתן הרצאת הקדמה עליה, אז אסתפק בתיאור החוויה האישית. שפת התכנות הראשונה שהיכרתי, אי שם בראשית שנות ה-1980, הייתה בייסיק (Basic). הימים ימי ה-DOS...
אין תגובות

סקריפט לשדרוג טבלאות ל-Clusterd ColumnStore Index

יום רביעי, פברואר 1, 2017

תחום ה-ColumnStore עבר כמה וכמה שינויים מאז שהוצג לראשונה בגרסת 2012.כיום, בגרסת 2016, ניתן ליצור כבר Clusterd ColumnStore Index שזו טבלה הבנוייה כ-ColumnStore, ולא רק טבלה סטנדארטית שיש לה בנוסף אינדקס ColumnStore; והרבה מהמגבלות שצויינו בפוסט שלי מאז – הוסרו.כדאי לציין שהמונח Clusterd ColumnStore Index קצת מטעה, כי בניגוד ל-Clustered Index “רגיל” (RowStore) – הוא אינו ממויין פיזית; ולכן ראוי היה לקרוא לו ColumnStore Heap, אלא ששם זה לא נשמע כל כך טוב.. אני מצרף בזאת סקריפט לשדרוג טבלאות ל-Clustered ColumnStore Index (מחולל את פקודות ה-TSQL הרלוונטיות): טבלאות שיש להן כבר Clustered Index “רגיל” (RowStore) יכולות להשתדרג בשלב...

Linked Servers – מקרים מיוחדים

יום שלישי, ינואר 31, 2017

ברוב במקרים, כשיוצרים Linked Server הולכים בדרך הישר: קישור לשרת ב-Dommain שלנו אליו אנחנו פונים ב-Linked Server ששמו כשם השרת, ויוצרים אותו בקלילות בעזרת ה-Wizard ב-SSMS.לעיתים יש מקרים מיוחדים, ואז צריך להתחיל לעבוד עם פרוצדורות המערכת ולהסתבך קצת (אני מדבר רק על עצמי..). לפני כשנה וחצי הצגתי את הקוד ליצירת Linked Server ל-SQL Azure, אך אחזור על כך לידיעת המאזינים שהצטרפו זה עתה: Exec master.dbo.sp_addlinkedserver @server=N'MyLinkedServer', ...
אין תגובות

תזמון משימות ב-SQL Azure בעזרת Azure Function

יום חמישי, ינואר 26, 2017

(תודה מראש לפיני קרישר על העזרה והמידע המועיל) אחת הבעיות המעט משעשעות שהיו ל-Azure בתחילת דרכו הייתה שלא ניתן היה להשתמש בו ללא שרת On Premise שאיפשר את כל מה ש-Azure לא.למשל: כיצד עובדים מול Azure? הרי לא מדובר בהתקנה שכוללת כלי Client כמו ה-SSMS.. צריך היה איזו התקנה – זמנית או מוזלת או לא חוקית כדי שיהיה ממשק עבודה. נכון שהפורטל הישן איפשר פעם הרצה של פקודות SQL, אך האפשרות הזו נוטרלה משיקולים השמורים למיקרוסופט, וכל מה שנשאר אלו אתרים בלתי תלויים (למשל- SkyVia). ההגינות מחייבת לציין שה-SSMS הוא בחינם כיום ולכן אין בעייה להוריד ולהתקין, אבל אני...
תגיות: , , ,
אין תגובות

הוספת שורות לשתי טבלאות בו זמנית

יום חמישי, דצמבר 1, 2016

פעם כתבתי פוסט על הנושא, בעיקר בתור אתגר; בשם חסכו ואמצו (2).באופן כללי, ניתן לשלוף את השורות שהשתנו (במקרה זה – התווספו) על ידי האופרטור Output,ואם קצת מתחכמים – להפנות את הפלט של ה-Output לטבלה שניה.בערך כך: If Object_ID('B') Is Not Null Drop Table B; If Object_ID('A') Is Not Null Drop Table A; Create Table A(ID Int Identity Primary Key, ...
אין תגובות

סטטיסטיקה: עדכון וקבלת החלטות

יום רביעי, אפריל 13, 2016

הפוסט שלהלן ממחיש את השימוש בסטטיסטיקה על ידי המערכת לבחירת ה-Execution Plan, ואת השפעתה של סטטיסטיקה לא מעודכנת על שימוש זה ואיכות הבחירה. בעזרת טבלת sys.messages (טבלת מערכת בת כ-250,000 שורות) אבנה טבלה עם נתונים היסטוריים, כלומר- אכניס את תוכן טבלת המערכת לטבלה שאבנה, בתוספת תאריך: If Object_ID('T_Messages','U') Is Not Null Drop Table T_Messages; Create Table T_Messages ( DateTime Not Null, message_id Int Not Null, language_id Int Not Null, ...

היכן הפסיק ה-n-י? (מציאת מופע של תת מחרוזת): גרסת ה-String_Split

יום חמישי, אפריל 7, 2016

לפני למעלה מ-6 שנים, בראשית דרכי כבלוגר, פרסמתי את הפוסט היכן הפסיק ה-n-י? (מציאת מופע של תת מחרוזת):נתונה טבלה ובה עמודת Subjects עם מקצועות שונים שכל סטודנט לומד - Create Table T_Students (Name VarChar(50), Subjects VarChar(Max));GoInsert Into T_StudentsValues ('Ana','Geography,Literature'), ('Beni','Chemistry,Economics,History,Sociology'), ('Carmel',''), ('Dana','Literature,Economics,Philosophy,Sociology'), ('Eli','Zoology,Economics,Geography,History,Science'), ('Felicia','Medicine');Go ויש לשלוף את המקצוע הרביעי (אם יש..) של כל סטודנט.הפתרון שאז מצאתי, בלוגר צעיר ונרגש שחרד...

Create & Drop Index

יום רביעי, אפריל 6, 2016

מה, זה לא צריך להיות Drop & Create? מוחקים אינדקס קיים, ויוצרים מחדש גרסה משופרת שלו, בדרך כלל עם תוספת של עמודה לאינדקס עצמו או לרשימת ה-Include..אז זהו שלא, וזה שייך לפינת ה”וואלה?” של השבוע, ובעברית - “איך לא חשבתי על זה קודם?”..פיני קרישר, ראש הצוות הבלתי נלאה, סיפר לי שקודם הוא עשה Drop לאינדקס, ואז תוך כדי כך שהאינדקס החדש נבנה – משימה כבדה בפני עצמה,  השרת התחיל לטחון Table Scans כי האינדקס לא היה קיים וה-Execution Plan השתנה לרעה, ה-CPU נסק אל על, ה-IO חגג, והשמחה הייתה רבה..בפעם הבאה ניצור קודם כל את האינדקס החדש עם שם...
תגיות: , ,
אין תגובות

חיתוך בין רשימות בעזרת הפונקצייה String_Split

יום שלישי, מרץ 29, 2016

הפונקצייה החדשה בגרסת 2016 יכולה להוות מקור לשימושים מעניינים. נכון שגם בעבר יכולנו ליצור user defined function בעזרת TSQL או בעזרת CLR, אלא שהחוכמה אינה לומר “מצאתי פתרון בעזרת פונקציית CLR שעושה את העבודה” אלא “מצאתי פתרון בעזרת מה שיש”. כעת “מה שיש” כולל גם את String_Split. אלו החוקים! (שלי לפחות..) הדוגמה שלהלן מעט מלאכותית, אבל יכולה להיות שימושית בנסיבות מסויימות, וזה תנאי מספיק לכתיבת פוסט.נתונה טבלת עובדים/תלמידים ולכל אחד מצויינות השפות בהן הוא שולט: If Object_ID('tempdb..#T','U') Is Not Null Drop Table #T; Create Table #T(Name NVarchar(10), ...
אין תגובות