‏הצגת רשומות עם תוויות mssql. הצג את כל הרשומות
‏הצגת רשומות עם תוויות mssql. הצג את כל הרשומות

יום ראשון, 30 ביוני 2013

גיבוי טבלאות וstored procedures בMSSQL

כמו כל דבר יש את שתי הדרכים, המגניבה שלא עוזרת, והמשעממת שעושה את העבודה.
אם אתם בעלי השרת: 
ניצור שני קבצים שהראשון מהווה פקודה בSQL, והשני יהיה פקודה שתריץ אותה מהמחשב האישי - ותעשה גיבוי בשרת עצמו.

נפתח את פנקס הרשימות ונכתב את הפקודה:
BACKUP DATABASE [שם מסד הנתונים] TO DISK = '\שם מסד הנתונים.bak' with init
 
 
נסגור את הקובץ ונשמור על שולחן העבודה, ונשמור זאת בסיומת SQL. ונקבל קובץ עם אייקון של SQL. לצורך העניין נקרא לו: backup.sql (כמה מפתיע...)
 
במידה ונריץ את הפקודה עצמה בSQL נקבל הודעה כזו:
 
Processed 472 pages for database 'שם מסד נתונים', file 'שם מסד נתונים_data' on file 1.
Processed 1 pages for database 'שם מסד נתונים', file 'שם מסד נתונים_log' on file 1.
BACKUP DATABASE successfully processed 473 pages in 0.061 seconds (60.578 MB/sec).

 
הקובץ גיבוי נשמר בשרת. עכשיו נושמים שנייה, ושוב נפתח את פנקס הכתובות ונכתוב קובץ נוסף, שיהווה את הפקודה שתריץ את הפקודה שכתבנו מקודם. נכתוב בקובץ עכשיו:
 
OSQL -U [שם משתמש] -P [סיסמא] -S [*המקום של השרת]  -i [מיקום הפקודה שמריצים**]
 
*80.80.800.180\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\שם הטבלה
 
**C:\Users\sivan\Desktop\backup.sql
 
המיקום של הטבלה בשרת נכון על פי השרת שלי. איך גילתי?
אם ארצה לעשות את הפעולה גיבוי בשרת (שיכשל, כי אין לי הרשאות) קליק ימני על המסד נתונים ובחירת "משימות" (tasks) וגיבוי (back up) יראה לי היכן "אמור" הקובץ להישמר, וכך אני יודע היכן נמצא הטבלאות נתונים בשרת.
 
טוב, בכל אופן הקטע המגניב, נסגור את השורה ונשמור בקובץ בפרומט batch עם סיומת bat, בשם go.bat ונקבל אייקון של מערכת הפעלה. 
לחיצה על הקובץ ההפעלה תפעיל את הפקודה, ותבצע גיבוי של הנתונים שלי בשרת של החברה המארחת, שעוזר לי במקרה שהאתר קרס (ח"ו, טפו, טפו, טפו) לבקש מהם את הקובץ. כך בלחיצה אחת כל יום יש ראש שקט.
 
טוב, זה השיטה המגניבה, אבל לא ממש עוזרת אם אני רוצה אצלי את כל הנתונים.
לכן נבצע דרך הSQL שאילתה של גיבוי של הטבלאות יחד עם הנתונים שבתוכה, והכל יופיע בצורת פקודות הרצה.
 
איך?
שוב קליק ימני על מסד הנתונים, ובחירת "משימות", ובתוך משימות נבחר "יצירת סקריפים" ( Generate Scripts), נוכל לבחור מה לגבות:
טבלאות, סטור פרוסיג'יר, טבלאות משתמשים וכו'
 
במסך השני יש אפשרות לגבות הכל. אנו נבחר את האפשרות השנייה, לבחור בעצמנו מה לגבות ואז נבחר טבלאות (ישנה אפשרות לבחור רק חלק מהטבלאות).
 
ואז מגיע הקטע החשוב:
באופן דיפלוטיבי הSQL יוצר גיבוי של הסכמה של הנתונים, רק את הפקודות שיוצרות את הטבלאות, אבל אנחנו רוצים לגבות את הנתונים עצמם. בשביל כך נלחץ על כפתור Advanced (מתקדם), ותחת הקטגוריה   General באפשרות האחרונה Types of data to script נשנה ממצב של Sechema only למצב של Sechema and data.
 
מכאן NEXT יעשה את העבודה,  הוא ירוץ על כל הטבלאות ויהפוך אותן לפקודות של יצירת טבלה, ואת כל הנתונים הוא יכניס בצורה מסודרת בפקודת INSERT .
 
אם קרה משהו למסד נתונים (חס וחלילה, כנ"ל), פתיחת הקובץ טקסט הזה ולחיצת F5 יבנה לנו את הכל בחזרה.
 

יום ראשון, 10 במרץ 2013

mssql סינון השורות האחרונות כולל תנאי

יש לנו מערכת מאמרים, שנמצאת בטבלת article,  בהן העמודות:
- הת.ז. של המאמר (מספר) articleId 
- תמונת המאמר (מחרוזת) articlePic  
- תאריך הכנסת השורה (תאריך) articleDate 

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


SELECT TOP 5 * FROM dbo.article 
ORDER BY articleDate DESC

בשימוש בפקודה ORDER BY articleDate DESC אנחנו מסננים את חמשת התוצאות מהסוף. כמו מיון מת' עד א' [הפקודה ההפוכה היא ASC שמורה למיין מא' עד ת']

ישנה אפשרות אחרת, לבצע חיפוש מהי הכתבה האחרונה, ולבצע SELECT על כל הID של הכתבות מהמספר האחרון פחות חמש.
SELECT * FROM dbo.article 
WHERE articleId > 
(SELECT MAX(articleId) - 5 FROM dbo.article)

בבעיה שלנו נתבקשנו לעשות תנאי בתוך תנאי, למצוא את כל הכתבות שיש להם תמונה, ומתוכם למצוא את חמשת האחרונות.
כמובן שהחיפוש השני לא יעיל כאן, כי ייתכן שבכלל בכל הID ש"נתפס" בתוך השאילתא - לאף אחד אין בכלל תמונה. לכן חוזרים לשאילתא הראשונה ונשכלל אותה:
SELECT TOP 5 * FROM dbo.article 
WHERE articlePic  !=  ''
ORDER BY articleDate DESC
חשוב לשים לב שהתנאי הראשון הינו שעמודה picArticle  לא תהיה ריקה ולכן נשמש בהגדרת מחרוזת בMSSQL ע"י שני גרשיים (ולא מרכאות, כמו שאנחנו רגילים מJS או C#)

יום שלישי, 13 בנובמבר 2012

0x80070005 (E_ACCESSDENIED)) שגיאה

משום מקום הפרוייקט שלי הפסיק להתחבר לMSSQL, נכנס ללולאת החיבור בtry ובchach קיבלתי את השגיאה הבאה:

0x80070005 (E_ACCESSDENIED))

לאחר נבירה קצרה באינטרנט - משמע שזה חסימה של הרשאות של MSSQL, ולהלן מדריך מפורט שנותן כמה אפשרויות לנסות לפתור את הבעיה:


בסוף הפתרון היה פשוט, כניסה אל תוכנת sql server configuration manager, נמצאת חלק מתיקיית הsql 2008 r2.
שם נוכל לראות את הגדרות החיבור שלנו, במאפייני החיבורים הפכתי את אחד מהם מNO לYES.

כרגע זה עובד, ובא נקווה שלא דפקתי משהו אחר במערכת =)