הרצת קוד SQL ב-Python

15/07/2017

לפני מספר שבועות פרסמתי את הפוסט הרצת קוד Python ב-SQL Server oשעסק ביכולת החדשה בגרסת 2017 הבעל”ט לשלב Python בתוך TSQL,והפעם נעסוק בצד השני המתרס – כיצד פונים מ-Python ל-SQL Server לצורך שליפה או עדכון.נתחיל בשליפה: import pyodbccon = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};PORT=1433;SERVER=tcp:teddicq7nm.database.windows.net,1433;PORT=1443;DATABASE=GeriReshefDB;UID=Ana;PWD=p@$$w0rD_p@$$w0rD')cursor = con.cursor()cursor.execute("Select * From T_Log;")Cr = cursor.fetchall()cursor.close()con.close()print(Cr)#I=0#while (I<;len(Cr)-1):# print(str(Cr) + " " + str(Cr))# I+=1 בשל רגישותו של Python להזחה (אינדנטיזציה) – יש לוודא שהשורות מוזחות באופן תקין.הסט מועבר לתוך list בשם row.במקרה זה אני מדפיס את כל ה-list בלי להתעכב על ענייני עיצוב רק כדי להמחיש...
תגיות: , , ,
אין תגובות

הפעלה וכיבוי אוטומטיים של VM ב-Azure (והמשך הקיטורים מהפוסט הקודם)

08/07/2017

שרתים וירטואלייםמחוייבים לפי המשאבים שהוקצו להם וזמן הפעילות, בניגוד לשרתים “בשר ודם” שהעלות המשתנה שלהם מתבטאת בצריכת חשמל ואולי בשחיקה מסויימת של החומרה. לכן כדאי לכבות אותם אם אינם בשימוש, ולחסוך חלק ניכר מהעלות.כדאי לציין ש”לכבות” אינו מתבטא רק בלהתחבר לשרת ולהוריד אותו, אלא בלכבות אותו דרך הפורטל – ואז הוא deallocated. משל למה הדבר דומה? החנתם את המכונית וכיביתם את המנוע כך שאינה צורכת יותר דלק, אבל עדיין צריך לשלם על החנייה. לו היה ניתן לעשות לה deallocation אפשר היה “להעלים” אותה לזמן מה ולחסוך גם את זה. הבהרה: כל מה שכתוב להלן מתייחס ל-VM שאינם Classic VM!...
אין תגובות

תזמון משימות ב-SQL Azure בעזרת Automation Accounts (והוצאת קיטור..)

06/07/2017

לפני כחצי שנה פרסמתי פוסט בשם תזמון משימות ב-SQL Azure בעזרת Azure Function ובו הסבר על תזמון של קוד #C שפונה ל-SQL Databse (גם הוא – ב-Azure),וכעת אותה הגברת בשינוי כותרת: הרצה של קוד PowerShell, בעזרת Automation Account.העובדה ש-Azure תומך גם ב-#C וגם ב-PowerShell זה מצויין, אך מה שפחות מובן זו העובדה שיש שני כלים שונים לתזמון של משימות. לא ברור למה.אולי זה כתוצאה מההשקעה של מיקרוסופט שמתבטאת בצוותים רבים שעובדים על משימות שונות, וכל אחד מקים תשתית משלו; ובעובדה שקשה למצוא את הידיים והרגליים בשלל האפשרויות הקיימות (“שלל אפשרויות” – טוב, “קשה למצוא” – לא טוב).התלונה העיקרית היא...
אין תגובות

מי פונה לעמודות בטבלה?

30/05/2017

אפשר בקלות יחסית לכתוב סקריפט שמוצא אילו אובייקטים (פרוצדורות, views וכו’) פונים לטבלה מסויימת בעזרת טבלת המערכת sys.sql_dependencies או קליק ימני ו-Dependencies על הטבלה בממשק הגרפי ב-SSMS; אך יותר מאתגר למצוא מי פונה לעמודות מסויימות בטבלה: הריי לא נרצה לקבל שמות של כמה עשרות אובייקטים שרובם פונים לעמודות אחרות שאינן מעניינות אותנו..השליפה (תואמת SQL 2016 ו-Azure): Declare @Obj Varchar(256)='dbo.MyTbl', @Col Varchar(Max)='Col1,Col2,Col3';With T As(Select Concat(Object_Schema_Name(D.object_id,DB_ID()),'.',Object_Name(D.object_id,DB_ID())) ObjectName, Concat(Object_Schema_Name(D.referenced_major_id,DB_ID()),'.',Object_Name(D.referenced_major_id,DB_ID())) ReferencedObjectName, D.is_selected, ...
אין תגובות

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

25/05/2017

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

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

22/05/2017

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

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

01/02/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/01/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/01/2017

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

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

01/12/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, ...
אין תגובות