PDA

View Full Version : اضافه کردن پیشوند به فیلد AutoNumber



m_royana
دوشنبه 20 مرداد 1393, 07:58 صبح
با سلام خدمت دوستان عزیز
من میخوام فیلدی داشته باشم به این شکل که بتونم هم از حالت AutoNumber استفاده کنم و هم یک پیشوند سال بهش اضافه کنم
مثلا این شکلی بشه :
930001
930002
930003
هر وقت سال عوض شد در ادامه بشه
940001
940002
940003

خود اس کیو ال این قابلیت رو داره یا باید کد بنویسم؟

Davidd
دوشنبه 20 مرداد 1393, 08:20 صبح
سلام. در SQL ميشه براي ستون ها فرمول تعريف كرد. هنگام تعريف ستون در قسمت مشخصات ستون يه جا داره Computed Column Specification . اونجا ميتوني فرمول بنويسي. با فرض اينكه يك ستون با نام auto و يك ستون با نام year داشته باشي فرمولش به اين شكل ميشه:
([year]+CONVERT([varchar](10),[auto],0))

m_royana
دوشنبه 20 مرداد 1393, 09:30 صبح
سلام. در SQL ميشه براي ستون ها فرمول تعريف كرد. هنگام تعريف ستون در قسمت مشخصات ستون يه جا داره Computed Column Specification . اونجا ميتوني فرمول بنويسي. با فرض اينكه يك ستون با نام auto و يك ستون با نام year داشته باشي فرمولش به اين شكل ميشه:
([year]+CONVERT([varchar](10),[auto],0))

با تشکر از شما
یک سوال دیگه هم داشتم .
فیلد AutoNumber من بیشتر از چهار رقم نمیشه. به چه طریقی می تونم این استاندارد رو روش اعمال کنم که چهار رقمی باشه؟
یعنی مثلا اگه یک رقم بود 3 تا صفر قبلش اضافه بشه یا اگه 2 رقم بود دو تا صفر قبلش اضافه بشه...؟

Davidd
دوشنبه 20 مرداد 1393, 10:08 صبح
خواهش. در مثال زير به جاي عدد 2 نام ستون مورد نظر نوشته شود. فك كنم كد واضح باشه
REPLICATE('0',4-LEN(cast(2 as varchar)))+cast(2 as varchar)

m_royana
دوشنبه 20 مرداد 1393, 11:43 صبح
خواهش. در مثال زير به جاي عدد 2 نام ستون مورد نظر نوشته شود. فك كنم كد واضح باشه
REPLICATE('0',4-LEN(cast(2 as varchar)))+cast(2 as varchar)

کد کاملا واضح و صحیح است و ممنون
فقط اینکه این دو کد با هم قابلیت ادقام دارند؟
مثلا این طوری :
([sal]+CONVERT([nvarchar](50),[REPLICATE('0',4-LEN(cast(row as nvarchar)))+cast(row as nvarchar)],0))

من هر کاری کردم خطا داد.
من یه فیلد برای سال دارم که کاربر وارد میکنه و NVarchar است
یه فیلد ردیف دارم که AutoNumber و از نوع Decimal است
یه فیلد شماره ثبت هم دارم که ادقام دو فیلد قبلیه که نتیجه میشه مثلا 931 - 932 - ... و میخوام بشه 930001 - 930002 - ...
ممنون

Davidd
دوشنبه 20 مرداد 1393, 13:14 عصر
آره ميشه ادغام كرد. تست كردم مشكلي نداشت. [] قبل و بعد تابع Replicate حذف كنيد و پرانتزهاي باز و بسته چك كنيد

m_royana
دوشنبه 20 مرداد 1393, 13:32 عصر
آره ميشه ادغام كرد. تست كردم مشكلي نداشت. [] قبل و بعد تابع Replicate حذف كنيد و پرانتزهاي باز و بسته چك كنيد

بله درست شد.
حالا مشکل جدید اینه که شماره ردیف (فیلد AutoNumber) که دیگه به عقب بر نمیگرده.
پس در نتیجه اینطوری میشه : 930001 - 930002 - 930003 - ... 930200 و در ادامه یعنی در سال 94 این طوری میشه : 940201 - 940202 - ...
من نمیخوام به ازای هر سال یک جدول داشته باشم و میخوام کلا توی یک جدول باشه
از طرفی هم نمیخوام این شماره زدن توسط نرم افزارم (که تحت شبکه است) انجام بشه
به نظر شما راه حلی وجود داره برای حل این مشکل؟

m_royana
دوشنبه 20 مرداد 1393, 19:52 عصر
اساتید گرامی راه حلی برای این مشکل ندارند؟
من توی نرم افزار دیگه ای دیدم که دقیقا به همین شکل شماره میزنه و یک جدول هم بیشتر نیست.