העתקת Tables Schema MSSQL

quawax

New member
העתקת Tables Schema MSSQL

שלום לכולם,

בסביבת ה-DEV שלי יש DB שעליו אני מפתח ביום יום ומבצע בו שינויים, אני מעוניין להעתיק את סכמת הטבלאות \ SP \ VIEWS וכ'ו ל-DB שנמצא ב-Production, בלי לפגוש ב-DATA שקיים שם.
אך ורק לעדכן את ה-Schema

אני עובד עם MSSQL 2008 r2

מישהו יכול בבקשה לכוון אותי בנושא?

תודה רבה!
 

גרי רשף

New member
אפשרות אחת זה לקנות תוכנה מתאימה..

..אבל אנחנו דוגלים ב"עשה זאת במו ידיך"..


לגבי כל האובייקטים שאינם טבלאות- צריך ליצור סקריפט מתאים שכולל פקודות Drop & Create (קליק ימני משם Tasks ולבסוף Generate Script).
לגבי טבלאות זה קצת יותר מורכב כי לא היית רוצה לעשות להם Drop עם כל הנתונים, אלא רק להשלים עמודות או אינדקסים שהתווספו.
במקרה זה ניתן להשוות בין טבלאות המערכת: החל מ-sys.tables שמחזיר את רשימת הטבלאות, משם ל-sys.columns שכולל את העמודות, וכלה ב-sys.indexes של האינדקסים (יש עוד טבלאות מערכת- תלוי באילו טכנולוגיות אתם משתמשים).
 
שאלה לגבי קליק ימני

פעם הוא היה מוציא לי את הסקריפט באופן אוטומטי עם איף אקסיטס דרופ.
היום הוא מוציא לי דרופ ישר. אם אני מייצר טבלה חדשה ועובר מסביבה לסביבה אני תמיד יקבל שגיאה, או שאני יוסיף כל פעם איף לבד.
נראה לי שזה התחיל לקרות לי כשעברתי ל2012, איך אני משנה אתזה.
 

pitoach

New member
לא הבנתי מה קורה לך אבל יש הרבה מאוד הבדלים

בין הממשק של 2012 לממשקים קודמים
למעשה זה לא פיתוח של SSMS מתקדם יותר על הבסיס הקודם, אלא ב 2012 ה SSMS מבוסס בכלל על visual studio

זה עולם שונה לחלוטין


נסה להבהיר מה הבעיה אולי שוב בצורה יותר ברורה של צעד אחרי צעד ואולי נוכל לשחזר פעולה דומה ב 2012.

נקודה נוספת למחשבה: תזכור שישנם עשרות אלפי תוספות ל SSMS ועם הזמן יכול להיות שהתקנת כאלה ולכן אתה רגיל לעבוד עם משהו שהוא למעשה add on ולא היה במקור.

אני לדוגמה ממשיך לעבוד עם SSMS של 2008r2 גם בשרת שיש בו 2012 לפעמים (בנוסף ל SSMS 2012 שעדיף בהרבה) בגלל נקודות קטנות נחמדות שיש בתוספות שהתקנתי. לדוגמה אם אני רוצה לקחת תמונות מסך של תוכניות הרצה בשביל בלוגים שאני כותב אז אני מעדיף לעבוד עם ה SSMS הישן, ששם התקנתי תוספות נחמדות שמאפשרות שמירת התוכנית הרצה כולה לתמונה (גם החלק שלא רואים... זה לא כמו צילום מסך) ועוד הרבה
 
אני ינסה לסביר שוב

אם אני לוחץ על Script Stored Procudure as -> Drop And Create
אסי אם אני ב-2008 אני מקבל:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[<name>]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[<name>] zz
ולעומת זאת ב2012 אני מקבל רק את הdrop בלי הif.
ב2008 לא התקנתי שום תוסף.
תודה מראש
 

pitoach

New member
זה נשמע שינוי זניח


המטרה היא DROP והבדיקה אם האובייקט קיים קודם אינה חלק מזה אלא רק משהו שנועד למנוע הופעת הודעת שגיאה כשמנסים למחוק משהו שאינו קיים

לדעתי זה דווקא שינוי מבורך אבל זה עניין נוחות והרגלים. אם את עובדת עם הממשק הגרפי ומייצרת את הסקריפט כשאתה וחצת על האובייקט ז"א הוא קיים... למה צריך לבדוק אם הוא קיים?


בכל מקרה מדובר על כל מני קודים שניתן להכניס בצורה מקוצרת. לפעולה של הכנסה קוד שמור מראש קוראים insert snippet. תמיד אפשר להוסיף עוד קודים ואם אתה צריך או נוח לך אז אתה ייכול להוסיף SNIPPET של החלק של ה IF

הנה מדריך בעברית לגבי SNIPPET ב 2012
פשוט תוסיפים של קודים שנוחיים לך
http://www.sqlserver.co.il/?p=3799
 

pitoach

New member
אני מאוד לא אוהב את הממשק פורום של מייקרוסופט

אבל משהו אחד שאני אוהב שם!
זה היכולת לעדכן הודעה אחרי שנשלחה
זה משהו שחסר לי כאן מאוד... כל הטעיות הקטנות של הקלדה או פזיזות
 

pitoach

New member
יש כלי מובנה בשרתי SQL בשם SSIS

הוא יאפשר לבצע העתקה של סכמות או סכמות + נתונים או רק נתונים ועוד.
לגהי לא לפגוע בדטא קיים אתה תמיד יכול במקום להריץ בסיום את התוצאה של הפעולה שביצעת ללחוץ על הכתור ייצא סקריפט או משהו כזה ואז במקום לבצע את הפעולה פשוט תקבל סקריפט של הפעולה ואז תוכל הלריץ אותה לבד מקטע אחרי מקטע ולבדוק שהכל תקין
 
למעלה