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

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

איך יש לו הרשאות? הקבוצה BUILTIN\Administrators

16/11/2016

מכירים את זה שיום אחד אתם מגלים משהו “חדש” אבל מתברר שהוא די ישן, ויש לכם הרגשה שכולם ידעו עליו ורק אתם לא?..מה, אתם לא מכירים את זה?.. נו, טוב: כנראה שזה רק אני.. :-( לאחד המשתמשים יש הרשאות נדיבות באחד האינסטנסים. זה לא סתם “אחד המשתמשים” אלא בעל תפקיד ניהולי, אבל לא אמורות להיות לו הרשאות ליצור דטבייס חדש.. אני ניגש לאופציית ה-Security ב-SSMS, אך שם יש לו לכל היותר הרשאות public (כלומר- הוא יכול להתחבר ותו לא), והוא אינו משוייך לאף Role.אם כך – אולי הוא משוייך לאחת הקבוצות ברמת ה-Active Directory.. אולי כן ואולי לא, אבל...
תגיות: , ,
אין תגובות

מניעת חריגות מערכים אפשריים בעמודות Identity וב-Sequences

25/10/2016

לעמודות בטבלאות יש מגבלות של גובה הערכים (בעמודות מספרים או תאריכים) או של אורך מחרוזות (בעמודות טקסטואליות), ובדרך כלל תקלות אמורות להימנע באופן אפליקטיבי.הפוסט הזה מטפל במניעת חריגות בעמודות Identity וב-Sequences: למשל, הגדרנו עמודת Int כ-Identity, הערך בעמודה הולך וגדל, וקצת אחרי 2 מיליארד הגענו לגבול העליון של Int. כשזה יקרה הקוד שינסה להכניס נתונים לטבלה יפול, והטיפול עלול להיות מורכב: שינוי העמודה (כולל הנתונים בה), שינויים במשתנים בפרוצדורות שמטפלות בה, שינויים ברפליקציות ועוד. סיפור שלם!תרומתי הצנועה למערכה היא סקריפט שמציג את הערכים הנוכחיים לצד הערכים המקסימליים האפשריים, בכל האובייקטים הרלוונטיים: Declare @SQL Varchar(Max);Select ...
אין תגובות

שילוב של האופרטורים In ו-Like

27/09/2016

נניח שרוצים למצוא בטבלה את כל השורות בהן עמודה מסויימת שווה ל-.. או ל.. או ל.. וכו’ (רשימה ארוכה של ערכים אפשריים). במקום לכתוב משהו כמו- Select *From MyTblWhere MyCol='..' Or MyCol='..' Or MyCol='..' .. נכתוב משהו אלגנטי וקריא יותר בסגנון של- Select *From MyTblWhere MyCol In ('..', '..', '..', .. ..); מה נעשה אם נרצה לכתוב משהו כמו- Select *From MyTblWhere MyCol Like '%..%' Or Like MyCol='%..%' Or MyCol Like '%..%' .. הרי לא נוכל לשלב In ו-Like ביחד.מה עושים?פתרון פשוט אין,...
אין תגובות