דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. מיספור אוטומטי SqlServer

מיספור אוטומטי SqlServer

מתוזמן נעוץ נעול הועבר ארכיון code613m
11 פוסטים 4 כותבים 1.1k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    שמואל
    כתב ב נערך לאחרונה על ידי
    #1

    האם יש אפשרות להגדיר ל-ID ספרות לפני הערך
    דוגמא:
    בטבלה אחת יתחיל המספר סידורי כך: 01/1, 01/2, 01/3 וכו'
    ובטבלה שניה כך: 02/1, 02/2, 02/3 וכו'
    ה'סלש' -/ לא מעכב

    פורסם במקור בפורום CODE613 ב21/05/2014 09:21 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      ארכיטקט
      כתב ב נערך לאחרונה על ידי
      #2

      כשאתה עושה identity יש גם מאפיין שנקרא sid שם אתה קובע את הערך ההתחלתי, להוסיף אפסים קודם לא נראה לי שאפשר כי הערך הוא int ולא varchar

      פורסם במקור בפורום CODE613 ב21/05/2014 10:11 (+03:00)

      אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

      תגובה 1 תגובה אחרונה
      3
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        כמו שארכיטקט אמר - תוכל להגדיר את הערך ההתחלתי גדול במיוחד ואז תהיה בטוח בקידומת (בהנחה שגידול השורות לא רציני).

        פורסם במקור בפורום CODE613 ב21/05/2014 11:13 (+03:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        1
        • clickoneC מנותק
          clickoneC מנותק
          clickone
          כתב ב נערך לאחרונה על ידי
          #4

          @שמואל

          האם יש אפשרות להגדיר ל-ID ספרות לפני הערך
          דוגמא:
          בטבלה אחת יתחיל המספר סידורי כך: 01/1, 01/2, 01/3 וכו'
          ובטבלה שניה כך: 02/1, 02/2, 02/3 וכו'
          ה'סלש' -/ לא מעכב

          @ארכיטקט

          כשאתה עושה identity יש גם מאפיין שנקרא sid שם אתה קובע את הערך ההתחלתי, להוסיף אפסים קודם לא נראה לי שאפשר כי הערך הוא int ולא varchar

          @דוד ל.ט.

          כמו שארכיטקט אמר - תוכל להגדיר את הערך ההתחלתי גדול במיוחד ואז תהיה בטוח בקידומת (בהנחה שגידול השורות לא רציני).

          ויכול להיות שהוא פשוט רוצה קידומת כדי שיוכל לעשות טבלת משנה ולהכניס בתוך עמודה אחת את מ2 הטבלאות.
          לדוגמא:
          נניח שהוא עושה טבלת שליחת מיילים, ויש לו טבלת תורמים וטבלת הורי תלמידים (בלי להיכנס לדיון אם נכון לעשות כך או לא.)
          אז במקום לעשות בטבלת שליחת המיילים ID של ההורה/תורם + עמודה של הטבלה, הוא יכול לעשות רק עמודה של ID, ובשביל לזהות תורם הוא יבדוק אם יש קידומת 1, והורה זה קידומת 2 וכו'.
          אם זה הכיוון, בSQL SERVER יש אפשרות להוסיף עמודה מחושבת, ואז אתה יכול להוסיף קידומת, ולהשתמש בזה כמפתח ראשי.
          הנה הקוד SQL:

          CREATE TABLE [dbo].[test](
          	[id] [int] IDENTITY(1,1) NOT NULL,
          	[sid]  AS (CONVERT([int],'1'+CONVERT([nvarchar](23),[ID],(0)),0)),
          	[LastName] [nvarchar](50) NULL
          ) ON [PRIMARY]
          

          שים לב שהייתי חייב בדוגמא "להמיר" את המספר לטקסט, כי אחרת הוא יחבר את הID עם הסיפרה 1 (ולא עוזר שזה מתוחם בגרשיים,הוא מספיק חכם להבין שזה מספר ולחבר אותו במקום לשרשר) ולהמיר אותו בחזרה למספר - בשביל שזה לא יעשה התנגשות בסוגי נתונים בקשרי גומלין.

          פורסם במקור בפורום CODE613 ב22/05/2014 00:08 (+03:00)

          אין טסט כמו פרודקשן.

          המייל שלי urivpn@gmail.com

          תגובה 1 תגובה אחרונה
          2
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #5

            ClickOne יפה מאוד שהצלחת לרדת לסוף דעתו, למצוא דוגמה שצריך את זה!
            ואיזה יופי הרעיון!!! לקח לי זמן להבין...

            אבל, הרעיון הזה זה רק לספורט נכון 🙂 ? כי לכאורה אין לרעיון הזה ייתרון על העצה הפשוטה של ארכיטקט. שים לב שגם הוספת עמודה פר טבלה (הורים ותורמים) ושעמודה מחושבת זה עמודה עם עלות מסויימת מבחינת ביצועים (במיוחד עם סטרינג!).

            פורסם במקור בפורום CODE613 ב22/05/2014 09:45 (+03:00)

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            1
            • ש מנותק
              ש מנותק
              שמואל
              כתב ב נערך לאחרונה על ידי
              #6

              @ClickOne

              יכול להיות שהוא פשוט רוצה קידומת כדי שיוכל לעשות טבלת משנה ולהכניס בתוך עמודה אחת את מ2 הטבלאות.

              אני נהנה לשמוע שלומדים את כוונותי

              אם כבר, לדוגמה בעסק שמנפיק חשבוניות וכמובן הם חייבים להיות לפי סדר רץ
              כאשר רוצים להתחיל מיספור מחדש או אפילו בו זמנית להשתמש בשני מיספורים שונים אז עושים סדרות בצורה כזו (כך עד כמה שידוע לי)
              סדרה אחת: 01/1, 01/2, 01/3 וכו',
              סדרה 2: 02/1, 02/2, 02/3 וכו',
              דרך אגב: נראה לי שהסלש הוא רק עניין תצוגתי להפריד כל פעם את שני הספרות הראשונות, אני צודק?

              פורסם במקור בפורום CODE613 ב22/05/2014 11:02 (+03:00)

              תגובה 1 תגובה אחרונה
              1
              • clickoneC מנותק
                clickoneC מנותק
                clickone
                כתב ב נערך לאחרונה על ידי
                #7

                אם גידול הרשימות משמעותי הפיתרון של ארכיטקט לא ישים. (גם אם המספר ההתחלתי הוא מליון והוא כותב מערכת גדולה הוא כבר נכנס לסיכון [במיוחד אם הטבלה הראשית שעליה הוא מדבר היא לא של אנשי קשר (שאין הרבה) אלא של מיילים לדוגמא - הוא לא יכול להגביל את עצמו למליון])

                ובאמת לא הוספתי עמודה פר טבלה (יכול להיות שזה הפיתרון היותר נכון בדוגמא הספציפית הזו [או עמודה נוספת שרק תספר לנו מאיזו טבלה נלקח המפתח הזר]) כמו שכתבת, אלא הרעיון הוא שמספר זר 11 זה ID 1 בטבלת תרמים ומספר זר 21 זה ID 1 בטבלת הורים וכו'.
                עמודה מחושבת זה אכן עלות מבחינת ביצועים, וגם עמודה נוספת שמכילה את מקור הטבלה של המפתח הזר היא כלות ביצועים.
                באופן אישי בגלל הסיבה הזו אני לא אוהב שדברים כאלו נמצאים כעמודה מחושבת בטבלה אלא בVIEW שמיועד לאותו מקרה ספציפי בלבד.

                לגבי הביזבוז עם סטרינג, אני רק רוצה להזכיר שסטרינג בהחלט יכול לשמש כמפתח ראשי על אף הבזבזנות שלו (ועל אף הרצון של כולנו להשתמש דווקא במספר אוטו') - לדוגמא: GUID, שממומש במקרים רבים כסטרינג + מפתח ראשי ולא כסוג uniqueidentifier.

                פורסם במקור בפורום CODE613 ב22/05/2014 11:13 (+03:00)

                אין טסט כמו פרודקשן.

                המייל שלי urivpn@gmail.com

                תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #8

                  @ClickOne

                  אם גידול הרשימות משמעותי הפיתרון של ארכיטקט לא ישים. (גם אם המספר ההתחלתי הוא מליון והוא כותב מערכת גדולה הוא כבר נכנס לסיכון [במיוחד אם הטבלה הראשית שעליה הוא מדבר היא לא של אנשי קשר (שאין הרבה) אלא של מיילים לדוגמא - הוא לא יכול להגביל את עצמו למליון])

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

                  @ClickOne

                  לגבי הביזבוז עם סטרינג, אני רק רוצה להזכיר שסטרינג בהחלט יכול לשמש כמפתח ראשי על אף הבזבזנות שלו (ועל אף הרצון של כולנו להשתמש דווקא במספר אוטו') - לדוגמא: GUID, שממומש במקרים רבים כסטרינג + מפתח ראשי ולא כסוג uniqueidentifier.

                  אני התכוונתי על בזבוז מעבד וזיכרון ברגע החישוב, לא על זיכרון דיסק באחסון (זה בכלל עמודה מחושבת!!).
                  לגבי מקום בדיסק או ביצועי השוואה (כאינדקס, וכמפתח ראשי) אין הבדל כלל בין סטרינג למספר, בתנאי שהסטרינג אורך קבוע (לא varchar), ושההשוואה היא מול מספר של קנה מידה שווה (עם זה char(10) לדוגמה, אז כל char זה byte שלם, מה שאומר מספר ענק.
                  אגב אפשר להשתמש למקרה שלנו גם בטיפוס binary, לכאורה זה חוסך.

                  פורסם במקור בפורום CODE613 ב22/05/2014 11:50 (+03:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  0
                  • clickoneC מנותק
                    clickoneC מנותק
                    clickone
                    כתב ב נערך לאחרונה על ידי
                    #9

                    @דוד ל.ט.

                    @ClickOne
                    אם גידול הרשימות משמעותי הפיתרון של ארכיטקט לא ישים. (גם אם המספר ההתחלתי הוא מליון והוא כותב מערכת גדולה הוא כבר נכנס לסיכון [במיוחד אם הטבלה הראשית שעליה הוא מדבר היא לא של אנשי קשר (שאין הרבה) אלא של מיילים לדוגמא - הוא לא יכול להגביל את עצמו למליון])

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

                    הסיכון לא נמצא גם אצלי, כי אצלי תמיד המספר יתחיל ב1 - אפילו כשזה יגיע למיליארד. (אתה מדבר כנראה על הגבול שINT יכול להגיע, ואני מדבר על זה שאפילו BIG יכול להוות בעייה אם נעשה התחלה ממליון)
                    @דוד ל.ט.

                    @ClickOne
                    לגבי הביזבוז עם סטרינג, אני רק רוצה להזכיר שסטרינג בהחלט יכול לשמש כמפתח ראשי על אף הבזבזנות שלו (ועל אף הרצון של כולנו להשתמש דווקא במספר אוטו') - לדוגמא: GUID, שממומש במקרים רבים כסטרינג + מפתח ראשי ולא כסוג uniqueidentifier.

                    אני התכוונתי על בזבוז מעבד וזיכרון ברגע החישוב, לא על זיכרון דיסק באחסון (זה בכלל עמודה מחושבת!!).
                    לגבי מקום בדיסק או ביצועי השוואה (כאינדקס, וכמפתח ראשי) אין הבדל כלל בין סטרינג למספר, בתנאי שהסטרינג אורך קבוע (לא varchar), ושההשוואה היא מול מספר של קנה מידה שווה (עם זה char(10) לדוגמה, אז כל char זה byte שלם, מה שאומר מספר ענק.
                    אגב אפשר להשתמש למקרה שלנו גם בטיפוס binary, לכאורה זה חוסך.

                    גם אני התכוונתי לבזבוז ביצועים ולא מקום (בגלל שזה עמודה מחושבת), למרות שיכול להיות שהפיתרון אמיתי כאן זה עוד עמודה(לא מחושבת) שתתחיל ב1. צריך פעם אחת לבדוק במקרה כזה האם ההשפעה שלחישוב מול מקום מה עדיף. - וכמובן, תמיד אפשר לתכנן את הDB שונה.

                    @שמואל

                    @ClickOne
                    יכול להיות שהוא פשוט רוצה קידומת כדי שיוכל לעשות טבלת משנה ולהכניס בתוך עמודה אחת את מ2 הטבלאות.

                    אני נהנה לשמוע שלומדים את כוונותי

                    אם כבר, לדוגמה בעסק שמנפיק חשבוניות וכמובן הם חייבים להיות לפי סדר רץ
                    כאשר רוצים להתחיל מיספור מחדש או אפילו בו זמנית להשתמש בשני מיספורים שונים אז עושים סדרות בצורה כזו (כך עד כמה שידוע לי)
                    סדרה אחת: 01/1, 01/2, 01/3 וכו',
                    סדרה 2: 02/1, 02/2, 02/3 וכו',
                    דרך אגב: נראה לי שהסלש הוא רק עניין תצוגתי להפריד כל פעם את שני הספרות הראשונות, אני צודק?

                    לענ"ד הסלש באמת רק תצוגתי, ולפי הוראות מס הכנסה אין חיוב לעשות סדרות - זה בא לידי ביטוי בד"כ רק בחברות ענק כמו חברת החשמל שלא רוצים להגיע למספרי חשבוניות דמיוניים. אני מניח שמס' הסידרה נמצא בשדה אחר (בחברת החשמל לדוגמא מס' הסידרה זה השנה - עכשיו זה 2014)

                    פורסם במקור בפורום CODE613 ב22/05/2014 12:36 (+03:00)

                    אין טסט כמו פרודקשן.

                    המייל שלי urivpn@gmail.com

                    תגובה 1 תגובה אחרונה
                    1
                    • א מנותק
                      א מנותק
                      ארכיטקט
                      כתב ב נערך לאחרונה על ידי
                      #10

                      @דוד ל.ט.

                      ושעמודה מחושבת זה עמודה עם עלות מסויימת מבחינת ביצועים (במיוחד עם סטרינג!).

                      @ClickOne

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

                      אין עלות ביצועים של שליפה כאשר משתמשים במאפיין is persisted. לפי מה שאני מבין אין לו שינויים תכופים במספרים, אלא רק פעם אחת בעת היצירה, אז אם הוא מצליח לממש את is persisted (זה לפעמים קצת קשה אם זה פונקציה מותאמת אישית הוא צריך לעשות לה WITH SCHEMABINDING ולא תמיד זה אפשרי)

                      פורסם במקור בפורום CODE613 ב22/05/2014 13:32 (+03:00)

                      אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                      תגובה 1 תגובה אחרונה
                      0
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        כתב ב נערך לאחרונה על ידי
                        #11

                        @ארכיטקט

                        אין עלות ביצועים של שליפה כאשר משתמשים במאפיין is persisted.

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

                        פורסם במקור בפורום CODE613 ב22/05/2014 13:51 (+03:00)

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        תגובה 1 תגובה אחרונה
                        0

                        בא תתחבר לדף היומי!
                        • התחברות

                        • אין לך חשבון עדיין? הרשמה

                        • התחברו או הירשמו כדי לחפש.
                        • פוסט ראשון
                          פוסט אחרון
                        0
                        • דף הבית
                        • קטגוריות
                        • פוסטים אחרונים
                        • משתמשים
                        • חיפוש
                        • חוקי הפורום