نمایش نتایج 1 تا 12 از 12

نام تاپیک: شماره های اتومات در sql

  1. #1

    شماره های اتومات در sql

    سلام دوستان.

    من در جدولم یه ستون به نام code دارم که از نوع int هستش و خاصیت identity increament اون true هست تا یکی یکی به صورت اتومات بره بالا.

    اگه من پنج تا رکورد داشته باشم و من رکورد 5 رو حذف کنم و بعدش اگه یه رکورد دیگه اضافه کنم ، شماره ستون code میشه 6 .
    حالا من نمیخوام همچی اتفاقی بیفته. یعنی اگه رکوردی رو از هرجای جدول حذف کردم ، شماره های دیگه به ترتیب و پشت سر هم بشن.
    (در ضمن مهم هم نیست که کدوم کد برای کدوم ستون باشه ، فقط پشت سر هم باشه.)
    ممنون میشم کمکم کنین.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: شماره های اتومات در sql

    نقل قول نوشته شده توسط mohammad1314 مشاهده تاپیک
    سلام دوستان.

    من در جدولم یه ستون به نام code دارم که از نوع int هستش و خاصیت identity increament اون true هست تا یکی یکی به صورت اتومات بره بالا.

    اگه من پنج تا رکورد داشته باشم و من رکورد 5 رو حذف کنم و بعدش اگه یه رکورد دیگه اضافه کنم ، شماره ستون code میشه 6 .
    حالا من نمیخوام همچی اتفاقی بیفته. یعنی اگه رکوردی رو از هرجای جدول حذف کردم ، شماره های دیگه به ترتیب و پشت سر هم بشن.
    (در ضمن مهم هم نیست که کدوم کد برای کدوم ستون باشه ، فقط پشت سر هم باشه.)
    ممنون میشم کمکم کنین.
    سلام
    شما از ابزار نادرستی استفاده کردی.
    Identity برای Id هست. منظورم کلید اصلی جدول هست که وظیفه‌اش فقط و فقط کلید اصلی بودنه.
    برای اون ستون code بجای استفاده از identity از trigger استفاده کن. نوع ستون رو Nullable بگذار.
    هنگام اضافه کردن بیشترین مقدار رو پیدا کن و خودت مقدار دهی کن
    هنگام حذف کردن مقدار این ستون تو سطرهای بعدی رو کم کن.

    در حاشیه: اگه منظورت از این ستون، «ردیف» هست. راه‌کار خوبی رو انتخاب نکردی.

    صبا صبوحی

  3. #3
    کاربر جدید
    تاریخ عضویت
    فروردین 1394
    محل زندگی
    ته دنیا!
    پست
    26

    نقل قول: شماره های اتومات در sql

    اگه می خوای برای گزارش گیری شماره سطر داشته باشی یه راه خیلی ساده هست:

    فرض کن جدول شما داری 2 تا column هست، ID که همون Identity هست که تعریف کردی و Name.
    برای درست کردن یه Table واسه تست سکریپت زیر رو اجرا کن:

    CREATE TABLE PERSON (ID INT IDENTITY PRIMARY KEY, NAME VARCHAR(MAX))


    INSERT INTO PERSON (NAME) VALUES ('ALI')
    INSERT INTO PERSON (NAME) VALUES ('MAJID')
    INSERT INTO PERSON (NAME) VALUES ('REZA')
    INSERT INTO PERSON (NAME) VALUES ('MAHMOUD')
    INSERT INTO PERSON (NAME) VALUES ('ABBAS')
    INSERT INTO PERSON (NAME) VALUES ('BIJAN')
    INSERT INTO PERSON (NAME) VALUES ('GHOLI')
    اگه جدول بالا رو Select * from Person کنی این جواب رو می بینی:

    ID NAME
    1 ALI
    2 MAJID
    3 REZA
    4 MAHMOUD
    5 ABBAS
    6 BIJAN
    7 GHOLI

    حالا داده های سطرهای 3 و 6 رو حذف می کنیم:

    DELETE FROM PERSON
    WHERE ID IN (3, 6)

    دوباره Select میزنیم و نتیجه اینه:

    ID NAME
    1 ALI
    2 MAJID
    4 MAHMOUD
    5 ABBAS
    7 GHOLI

    حالا شما می خوای شماره سطر بدی بهش، Query شما اینجوری می شه:


    SELECT ID
    , NAME
    , ROW_NUMBER() OVER(ORDER BY NAME) SEQUENCE
    FROM PERSON



    جوابی که می بینی اینه:



    ID NAME SEQUENCE
    5 ABBAS 1
    1 ALI 2
    7 GHOLI 3
    4 MAHMOUD 4
    2 MAJID 5

    زیر ستون Sequence شماره سطر داری.
    بدون درد و خونریزی!
    آخرین ویرایش به وسیله soheileee : سه شنبه 25 فروردین 1394 در 02:00 صبح

  4. #4
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    Question نقل قول: شماره های اتومات در sql

    سلام به همه ...
    میخوام شماره اولین سطر از 1000 شروع بشه و 5 تا ، 5 تا بره جلو ...
    یعنی اولین سطر بشه 1000 بعدی 1005 ، بعدی 1010 و همینطور تا آخر !
    اینکارو انجام دادم ولی هیچ اتفاقی نمیوفته : (عکس ضمیمه)
    عکس های ضمیمه عکس های ضمیمه

  5. #5
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: شماره های اتومات در sql

    نقل قول نوشته شده توسط ghasem110deh مشاهده تاپیک
    سلام به همه ...
    میخوام شماره اولین سطر از 1000 شروع بشه و 5 تا ، 5 تا بره جلو ...
    یعنی اولین سطر بشه 1000 بعدی 1005 ، بعدی 1010 و همینطور تا آخر !
    اینکارو انجام دادم ولی هیچ اتفاقی نمیوفته : (عکس ضمیمه)
    سلام
    دقیقاً برعکس انجام دادی.
    اگه هیچ رکوردی وجود نداره، اولین مقدار رو از Seed بر می‌داره. و هر بار به آخرین مقداری که برای این ستون وجود داره
    مقدار Identity Increment رو اضافه می‌کنه.
    مقدار رو درست بده، حتماً باید کار کنه.

    صبا صبوحی

  6. #6
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    نقل قول: شماره های اتومات در sql

    ممنون ...
    با توضیحات شما ... الان باید از 5 شروع بشه و هربار 1000 بهش اضافه کنه !؟
    ولی کلا از 1 شروع میشه و یکی یکی میره بالا !!!

  7. #7
    کاربر جدید
    تاریخ عضویت
    فروردین 1394
    محل زندگی
    ته دنیا!
    پست
    26

    نقل قول: شماره های اتومات در sql

    نقل قول نوشته شده توسط ghasem110deh مشاهده تاپیک
    ممنون ...
    با توضیحات شما ... الان باید از 5 شروع بشه و هربار 1000 بهش اضافه کنه
    ولی کلا از 1 شروع میشه و یکی یکی میره بالا !!!
    بالاخره می خوای از 1000 شروع بشه و 5تا 5تا بهش اضافه بشه یا از 5 شروع بشه و 1000 تایی بالا بره؟!

    روش زیر رو انجام بده برای موردی که می خوای از 1000 شروع بشه و 5تایی بالا بره:
    • جدول قبلی رو پاک کن.
    • در کد زیر بجای YOUR_TABLE نام مورد نظر خودت رو بذار و کد رو اجرا کن


    CREATE TABLE YOUR_TABLE(ID INT IDENTITY(1000,5), NAME VARCHAR(MAX))


    اگه می خوای از 5 شروع بشه و 1000تایی بالا بره در کد بالا جای اعداد 5 و 1000 رو عوض کن.

    البته این رو هم بگم که دلیل یه چنین درخواستی از نظر تکنیکال برام روشن نیست، چون اگه شما یه سطر رو پاک کنی، اون سطر برای همیشه رفته و سطرهای جدیدی که اضافه می کنی از ادامه آخرین شماره بالا خواهد رفت و عملاً اون ترتیب و توالی که می خوای از بین میره.
    از طرفی کلاً این کار چه فایده ای داره؟
    کلاً Identity ساخته شده برای اینکه شما بتونی به سادگی یه کاندیدا برای Primary Key داشته باشی.

  8. #8
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: شماره های اتومات در sql

    نقل قول نوشته شده توسط ghasem110deh مشاهده تاپیک
    ممنون ...
    با توضیحات شما ... الان باید از 5 شروع بشه و هربار 1000 بهش اضافه کنه !؟
    ولی کلا از 1 شروع میشه و یکی یکی میره بالا !!!
    سلام
    در کل وجود ابزار راحت ( مثل Management Studio ) همیشه این مشکل رو ایجاد می‌کنن که
    کاربر متوجه نشه واقعاً چی شده.
    شما برای این که هم خودت دقیق متوجه بشی که چرا درست کار نمی‌کنه هم ما روشن بشیم
    که شما چیکار کردی، از این جدول یک script بگیر و اینجا کپی کن.
    چون چیزی که شما نشون دادی، باید کار کنه.

    صبا صبوحی

  9. #9
    کاربر دائمی آواتار ghasem110deh
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    تهران
    پست
    1,148

    نقل قول: شماره های اتومات در sql

    از 1000 شروع و 5 تا ، 5 تا بره بالا ... خیلی هم مهم نیست رقم (میخوام ارقام عادی آیدنتیتی نباشه ... یعنی از 1 الی آخر)

    از طرفی کلاً این کار چه فایده ای داره؟
    دو تا جدول دارم ... Agent - Cost که با هم در ارتباط هستن ، نمیخوام آیدی سطرهاشون یکی باشه ؛
    چون یه view باید شماره آیدی هر دو جدول رو نشون بدم !

    که شما چیکار کردی، از این جدول یک script بگیر و اینجا کپی کن.
    چون چیزی که شما نشون دادی، باید کار کنه.
    جدول رو پاک کردم و دوباره ایجاد کردم ...

    -------------------------------------------

    روش درستی واسه این کاری که میخوام انجام بدم هست ؟
    نمیخوام آیدی سطرهاشون یکی باشه ؛
    چون یه view باید شماره آیدی هر دو جدول رو نشون بدم !

  10. #10
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: شماره های اتومات در sql

    نقل قول نوشته شده توسط ghasem110deh مشاهده تاپیک
    از 1000 شروع و 5 تا ، 5 تا بره بالا ... خیلی هم مهم نیست رقم (میخوام ارقام عادی آیدنتیتی نباشه ... یعنی از 1 الی آخر)



    دو تا جدول دارم ... Agent - Cost که با هم در ارتباط هستن ، نمیخوام آیدی سطرهاشون یکی باشه ؛
    چون یه view باید شماره آیدی هر دو جدول رو نشون بدم !



    جدول رو پاک کردم و دوباره ایجاد کردم ...

    -------------------------------------------

    روش درستی واسه این کاری که میخوام انجام بدم هست ؟
    سلام
    کاش از اول صورت مساله رو گفته بودی.
    این کاری که داری می‌کنی کاملاً کار اشتباهی هست. برای این کار روش‌های به‌تری هم وجود داره.
    من ترجیح می‌دم یه جدول مشترک داشته باشم که حاوی اون کلید اصلی یکتا باشه. و دو جدول شما
    یک کلید اصلی به صورت عادی ( بدون Identity ) داشته باشه که ضمن کلید اصلی بودن، کلید خارجی به
    کلید اصلی اون جدول مادر باشه. یه چیزی مثل BaseClass که دو تا کلاس ازش ارث می‌برن.
    کار اضافی که باید انجام بدی اینه که برای هر سطری که می‌خوای اضافه کنی، باید به‌جای یک جدول
    توی دو تا جدول رکورد رو اضافه کنی.
    این‌طوری دیگه به این مشکل برخورد نمی‌کنی.

    صبا صبوحی

  11. #11
    کاربر جدید
    تاریخ عضویت
    فروردین 1394
    محل زندگی
    ته دنیا!
    پست
    26

    نقل قول: شماره های اتومات در sql

    نقل قول نوشته شده توسط ghasem110deh مشاهده تاپیک
    از 1000 شروع و 5 تا ، 5 تا بره بالا ... خیلی هم مهم نیست رقم (میخوام ارقام عادی آیدنتیتی نباشه ... یعنی از 1 الی آخر)



    دو تا جدول دارم ... Agent - Cost که با هم در ارتباط هستن ، نمیخوام آیدی سطرهاشون یکی باشه ؛
    چون یه view باید شماره آیدی هر دو جدول رو نشون بدم !



    جدول رو پاک کردم و دوباره ایجاد کردم ...

    -------------------------------------------

    روش درستی واسه این کاری که میخوام انجام بدم هست ؟
    اگه نمی خوای IDها شبیه باشن، چرا یه Computed Column به هر کدوم از Tableها Add نکنی که متشکل از ID باشه با یه String برای شناسایی سریع IDها از هم؟

    مثلاً فرض کن کلمات "Cost" و "Agent" رو به ID اضافه کنی. فکر کنم مشکل حل بشه.

    برای این کار کافیه یه چیزی شبیه این رو اجرا کنی:



    ALTER TABLE COST ADD ALIAS_ID AS (CONCAT('COST',[ID]))
    GO
    ALTER TABLE AGENT ADD ALIAS_ID AS (CONCAT('AGENT',[ID]))
    GO

  12. #12
    کاربر جدید
    تاریخ عضویت
    فروردین 1394
    محل زندگی
    ته دنیا!
    پست
    26

    نقل قول: شماره های اتومات در sql

    یادم رفت بگم که دستور CONCAT در SQL SERVER 2012 به بعد موجوده، اگه از 2008 یا قبل تر استفاده می کنی باید ID رو Convert کنی و بعد به رشته مورد نظرت الحاقش کنی.

تاپیک های مشابه

  1. چه نسخه ای از sql server با توجه به شماره های اون رو pc نصبه
    نوشته شده توسط swallow.pa در بخش مسائل مرتبط با نصب و راه اندازی
    پاسخ: 1
    آخرین پست: سه شنبه 12 اردیبهشت 1391, 15:18 عصر
  2. پاسخ مودم به شماره های خاص ورودی
    نوشته شده توسط orion188 در بخش شبکه و Networking‌
    پاسخ: 9
    آخرین پست: جمعه 11 فروردین 1385, 14:00 عصر
  3. مدیریت پیغام های خطا در sql server یا ado
    نوشته شده توسط vjp در بخش SQL Server
    پاسخ: 1
    آخرین پست: دوشنبه 24 اسفند 1383, 10:57 صبح
  4. شماره های جا افتاده....
    نوشته شده توسط payam59 در بخش Access
    پاسخ: 2
    آخرین پست: شنبه 08 اسفند 1383, 10:06 صبح
  5. ذخیره علامت های خاص در SQL
    نوشته شده توسط FirstLine در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: سه شنبه 12 آبان 1383, 12:33 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •