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

יום חמישי, דצמבר 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, ...
אין תגובות

כיצד מבצעים Select מטבלה דרך Linked Server?

יום רביעי, נובמבר 26, 2014

התשובה לשאלה בכותרת ברורה לכל טירון: Select * From MyLinkedServer.MyDB.dbo.MyTable (וכל הוואריאציות המתבקשות).זה אמנם נכון כשהכל תקין, אך מה קורה כשיש בעייה והשרת אינו מחובר?אפשרות אחת היא לבדוק אם יש חיבור בעזרת פרוצדורה מפוסט קודם. הפרוצדורה ההיא עובדת, אך עדיין יש בעייה ביצירת פרוצדורה שפונה ל-Linked Server שאינו פעיל; כפי שנראה בהמשך.ננסה להסתדר בלי הפרוצדורה הנ”ל, וראשית חוכמה ניצור Linked Server הפונה לשרת kukuku שלא היה ולא נברא (כולל איפשור RPC כדי שיהיה ניתן להפעיל פרוצדורות בהמשך): Exec master.dbo.sp_addlinkedserver @server = N'LSnot', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'Kukuku';Exec master.dbo.sp_serveroption @server=N'LSnot', @optname=N'rpc', @optvalue=N'true';Exec master.dbo.sp_serveroption @server=N'LSnot', @optname=N'rpc out', @optvalue=N'true';Go וכעת פרוצדורה ששולפת ערך דרכו,...
אין תגובות

הרצת פקודות דינמיות: Exec מול SP_ExecuteSQL

יום רביעי, אוקטובר 10, 2012

כשמריצים SQL דינמי ניתן לעשות שימוש באחת משתי פרוצדורות המערכת הנ"ל. ה-DBA-ים הוותיקים בוודאי זוכרים במעורפל משהו על כך ש-SP_ExecuteSQL עדיפה מפני שהיא יכולה למחזר Execution Plans, אך מה זה בדיוק אומר ומי מבין השתיים עדיפה ומתי? נפתח ברשימת המצרכים- טבלה עליה נוכל להריץ את הקודים הדינמיים: Use tempdb; Go   If Object_ID('T_Messages','U') Is Not Null Drop Table T_Messages; Go   Select * Into T_Messages From sys.messages; ...
תגובה אחת

הפיכת נוסחה (מחרוזת טקסט) לערך מספרי

יום רביעי, מאי 25, 2011

נניח שאנחנו קולטים נתונים ממסך בו צריך להזין ערך מספרי, אך לעיתים נכתבת שם נוסחה. למשל- מישהו כותב 2011-1960 במקום את גילו (51), או אולי 120*1.165 כדי לציין ערך כולל מע"מ וכו'; ואת הערך הזה יש לתרגם לערך מספרי. מתימטית זו אינה בעייה קשה במיוחד, אבל אם יש לנו משתנה טקסטואלי שתוכנו הוא חישובי, כיצד נחלץ ממנו את התוצאה למשתנה אחר? אפשר להשתמש למשל בפרוצדורה SP_ExecuteSQL שמאפשרת להריץ קוד דינאמי, ואת התוצאה להפנות למשתנה (הבעייה כאן היא לחלץ את מה שרץ בחלק הדינאמי אל מחוץ לחלק הדינאמי - פעולה שאינה ברורה מאליה): ...
אין תגובות

פרוצדורה להשוואת טבלאות בין הפיתוח לייצור

יום שני, מרץ 21, 2011

לפני שנה בדיוק פירסמתי פוסט לגבי השוואה בין טבלאות. אני והקולגות משתמשים בשיטה הזו לא מעט, ולנוחות כולם כתבתי פרוצדורה פשוטה שמקבלת כקלט שם של טבלה, מבצעת את ההשוואה, וגם מדפיסה כבונוס את פקודת ה-SQL למי שירצה לשחק איתה, להגביל אותה, או לחקור אותה:   Create Proc P_TblDif @Tbl As Sysname, @RmtServer As Sysname='MyProdServer' As ...
תגובה אחת

לכידת פלט של SQL דינאמי

יום שני, ספטמבר 13, 2010

אנחנו רוצים לקלוט לתוך משתנה את מספר השורות בטבלה או אולי במשפט SQL, למשל טבלת המערכת sysobjects: Declare @Cnt Int; Select @Cnt=Count(*) From sys.objects; Select @Cnt; Go קל ופשוט! מה נעשה אם נקבל את שם הטבלה בתור משתנה? במקרה זה נצטרך לבנות ולהריץ משפט SQL דינאמי מכיוון שלא ניתן להריץ משפט בסגנון Select Count(*) From @Tbl, ואזי איך נקלוט את התוצאה לתוך משתנה? להלן דוגמה כיצד: Declare @Tbl NVarchar(Max), @SQL NVarchar(Max), @Cnt1 Int; Select @Tbl='sys.objects'; Select @SQL='Select @Cnt2 = Count(*)...
אין תגובות