PDA

View Full Version : شروع شدن id از 100



mahdi101
یک شنبه 12 آبان 1392, 22:48 عصر
باسلام
دوستان من یک جدولی دارم می خوام که id هام از 100 شروع بشه باید چی کار کنم؟؟

erfan_urchin
یک شنبه 12 آبان 1392, 23:01 عصر
اگه منظورت توی SQL هستش باید توی Design روی ستون id کلیک کنی و بری پایین صفحه ، تو قسمت پراپرتی ها و مراحل زیر رو انجام بده
identity specification >>>> Is Identity = YES >>>> Identity Seed = 100

mahdi101
یک شنبه 12 آبان 1392, 23:11 عصر
یه سوال دیگه
ما وقتی
identity specification رو برای yes قرار میدیم id رو بصورت Auto میزنه خب حالا اگه ما بیام و اطلاعات جدوول رو پاک کنیم بعدا که می خوایم یک اطلاعات جدید اضافه کنیم id رو ادامه ی تموم آیدی ها (حالا چه حذف شده و چه موجود) میزنه؟؟
حالا میشه کاری کرد که اینطوری نشه؟؟

erfan_urchin
یک شنبه 12 آبان 1392, 23:14 عصر
بله درسته
اما مایکروسافت فکر اونجاشم کرده :لبخند:
شما میتونی با استفاده از کد زیر اطلاعات جدولو جوری پاک کنی که دوباره id هارو از اول بنویسه
truncate table t1
-- همون اسم جدوله t1

mahdi101
یک شنبه 12 آبان 1392, 23:18 عصر
بله درسته
اما مایکروسافت فکر اونجاشم کرده :لبخند:
شما میتونی با استفاده از کد زیر اطلاعات جدولو جوری پاک کنی که دوباره id هارو از اول بنویسه
truncate table t1
-- همون اسم جدوله t1
ممنون ولی
الان این کد رو کجا بنویسم؟؟

erfan_urchin
یک شنبه 12 آبان 1392, 23:23 عصر
اگه میخوای از تو C# کد نویسی کنی باید توی SQLCommand کدو بنویسی
ولی اگه میخوای از طریق خود SQL این کارو انجام بدی باید توی New Query این کدو بنویسی

mahdi101
یک شنبه 12 آبان 1392, 23:25 عصر
اگه میخوای از تو C# کد نویسی کنی باید توی SQLCommand کدو بنویسی
ولی اگه میخوای از طریق خود SQL این کارو انجام بدی باید توی New Query این کدو بنویسی
شرمنده:خجالت:
منظورم این بود که تویک کوِئری جدا بنویسم یا نه تو همون کئوری که دستور delete رو نوشتم!.

erfan_urchin
یک شنبه 12 آبان 1392, 23:28 عصر
منظورتو خوب نفهمیدم اما چیزی که فهمیدم اگه درست باشه جواب اینه
این کد کل اطلاعات جدولو delete میکنه
فرقیم نمیکنه تو یه کوئری دیگه بنویسی یا توی همون کوئری بنویسی
در هرصورت کارشو انجام میده

mahdi101
یک شنبه 12 آبان 1392, 23:37 عصر
من اینا نوشتم ولی جواب نداد
delete from customer_B where c_id=@id
truncate table customer_b
چرا؟

erfan_urchin
یک شنبه 12 آبان 1392, 23:41 عصر
دوست عزیز گفتم این کدی که من دادم کل اطلاعات جدولو پاک میکنه، نه یه فیلدو
اما شما ظاهرا میخواین فقط یه فیلد خاصو پاک کنه ( مثلا فیلدی که آیدیش مساوی 3 هستش )
درسته؟؟؟

mahdi101
دوشنبه 13 آبان 1392, 17:16 عصر
دوست عزیز گفتم این کدی که من دادم کل اطلاعات جدولو پاک میکنه، نه یه فیلدو
اما شما ظاهرا میخواین فقط یه فیلد خاصو پاک کنه ( مثلا فیلدی که آیدیش مساوی 3 هستش )
درسته؟؟؟
درسته من فیلد با آیدی پاک می کنم ولی فرقی نداره این طوری هم کل اطلاعات پاک میشه.
حالا این دستور رو کامل بنویسین..
ممنون

khokhan
دوشنبه 13 آبان 1392, 18:54 عصر
درسته من فیلد با آیدی پاک می کنم ولی فرقی نداره این طوری هم کل اطلاعات پاک میشه.
حالا این دستور رو کامل بنویسین..
ممنون
.................................................. ..........................:لبخند:


SQL TRUNCATE Statement

The SQL TRUNCATE command is used to delete all the rows from the table and free the space containing the table.
Syntax to TRUNCATE a table:

TRUNCATE TABLE table_name;
For Example: To delete all the rows from employee table, the query would be like,
TRUNCATE TABLE employee;
Difference between DELETE and TRUNCATE Statements:
DELETE Statement: This command deletes only the rows from the table based on the condition given in the where clause or deletes all the rows from the table if no condition is specified. But it does not free the space containing the table.
TRUNCATE statement: This command is used to delete all the rows from the table and free the space containing the table.



لینک (http://www.sql2developers.com/2012/07/delete-statement-vs-truncate-statement.html)

mahdi101
دوشنبه 13 آبان 1392, 21:22 عصر
ولی این دستور که کل اطلاعات رو یک جا پاک میکنه !!!!

veniz2008
سه شنبه 14 آبان 1392, 04:41 صبح
یه سوال دیگه
ما وقتی
identity specification رو برای yes قرار میدیم id رو بصورت Auto میزنه خب حالا اگه ما بیام و اطلاعات جدوول رو پاک کنیم بعدا که می خوایم یک اطلاعات جدید اضافه کنیم id رو ادامه ی تموم آیدی ها (حالا چه حذف شده و چه موجود) میزنه؟؟
حالا میشه کاری کرد که اینطوری نشه؟؟
سلام.
با اجازه دوست عزیزم جناب خوخان.
اگر منظور شما رو درست متوجه شده باشم شما میخوای یک رکورد (نه همه رکوردها) رو حذف کنید و به جای اینکه identity از " آخرین عدد + 1 " درج بشه از یک عدد که مد نظر خودتون هست شروع بشه.
اگر چنین منظوری دارید یه کار میتونید انجام بدید:
رکورد مورد نظر رو با همون دستور delete ای که خودتون نوشتید حذف کنید.
برای درج رکورد جدید با identity مد نظر شما (نه identity اتوماتیک)، ابتدا با کد زیر خاصیت identity رو برای جدول مورد نظر بی اثر کنید (منظور از بی اثر کردن یعنی خودتون بهش مقدار بدید به جای اینکه خودش اتوماتیک اضافه بشه):

Set Identity_Insert TblName ON
منظور از TblName نام جدول شماست.
حالا خودتون برای فیلد identity هر مقداری رو که دوست دارید وارد کنید. مثلا فرض کنید قبلا برای فیلد CustomerID که identity بوده و تا 150 مقداردهی شده، الان میخوای از 250 مقداردهی بشه. بعد از نوشتن کد بالا، حالا یک رکورد جدید رو Insert کنید:

Insert Into TblCustomers(CustomerID,CustomerName,CustomerAddre ss) Values(250,'your name','Iran')
توجه داشته باشید که شما می تونید به جای مثلا عدد 250، شماره آخرین عددی که رکورد اونو حذف کردید رو هم قرار بدید(اگر میخواید تمام شماره های جدولتون پشت سر هم باشه).
بعد از درج رکورد دوباره identity رو فعال کنید تا باز هم خودش بصورت اتوماتیک برای رکوردهای بعدی مقدار CustomerID رو درج کنه:

Set Identity_Insert TblName OFF
دقت کنید بعد از فعالسازی مجدد identity رکورد بعدی مقدار فیلد CustomerID اش برابر با 251 خواهد بود (به شرط اینکه یکی یکی اضافه بشه).
برای اجرای کدهای بالا یا از stored procedure ها استفاده کنید یا اگر مستقیم درون ویژوال کد مینویسید از SqlCommand و متد ExecuteNonQuery استفاده کنید.
موفق باشید.

mahdi101
سه شنبه 14 آبان 1392, 15:31 عصر
سلام.
با اجازه دوست عزیزم جناب خوخان.
اگر منظور شما رو درست متوجه شده باشم شما میخوای یک رکورد (نه همه رکوردها) رو حذف کنید و به جای اینکه identity از " آخرین عدد + 1 " درج بشه از یک عدد که مد نظر خودتون هست شروع بشه.
اگر چنین منظوری دارید یه کار میتونید انجام بدید:
....
خیلی ممنون از راهنمایی خوبتون...
من الان با این ارور مواجه شدم
Table 'customer_b' does not have the identity property. Cannot perform SET operation.
نمی دونم چرا ؟؟؟؟
من کدهام رو اینتوری نوشتم:
اول در یک stord pro این کدهارو نوشتم:
create proc insert_customer_b @name nchar(30),@family nchar(30),@mobile bigint,@tell bigint,@adress nchar(100)
as
begin
Set Identity_Insert customer_b ON
insert into customer_B(c_id,c_name,c_family,c_mobile,c_tell,c_ adress)values(100,@name,@family,@mobile,@tell,@adr ess)
Set Identity_Insert customer_b OFF
end
و در یک stor دیگه دستور delete رو نوشتم:
delte from customer_b where c_id

یعنی کجاش اشتباهه؟؟؟
ممنون:قلب::قلب:

veniz2008
سه شنبه 14 آبان 1392, 16:29 عصر
خیلی ممنون از راهنمایی خوبتون...
من الان با این ارور مواجه شدم
Table 'customer_b' does not have the identity property. Cannot perform SET operation.
نمی دونم چرا ؟؟؟؟
من کدهام رو اینتوری نوشتم:
اول در یک stord pro این کدهارو نوشتم:
create proc insert_customer_b @name nchar(30),@family nchar(30),@mobile bigint,@tell bigint,@adress nchar(100)
as
begin
Set Identity_Insert customer_b ON
insert into customer_B(c_id,c_name,c_family,c_mobile,c_tell,c_ adress)values(100,@name,@family,@mobile,@tell,@adr ess)
Set Identity_Insert customer_b OFF
end
و در یک stor دیگه دستور delete رو نوشتم:
delte from customer_b where c_id

یعنی کجاش اشتباهه؟؟؟
ممنون:قلب::قلب:
حکایت شما، حکایت اون بنده خداست که قرار بود یه آرزو بکنه و آرزوش برآورده بشه و آرزوش این بود که توی قرعه کشی برنده بشه ولی از قضا یادش رفته بود حساب باز کنه.
مرد مومن، آخه وقتی جدولت identity نداره چطوری واست غیر فعالش کنه؟
sp ای که نوشتی درسته فقط نوع متغیرها رو اشتباه گرفتی دوست من.
همیشه برای رشته های فارسی مثل نام و فامیل از نوع nvarchar بگیر.
برای تلفن و موبایل که اولشون 0 هست از نوع (11)varchar بگیر (هم تلفن ثابت هم موبایل هر دو شون 11 رقم هستن).
در مورد دستور delete هم باید کد مشتری رو بهش بدی تا بتونه حذف کنه :

delete from customer_b where c_id = @cid

mahdi101
سه شنبه 14 آبان 1392, 16:49 عصر
شرمنده :خجالت:دوست عزیز چه کنیم دیگه تازه اول راهمونه مثل شما که حرفه ای نیستیم..:لبخندساده:
وقتی که اولین فیلد رو میزنم درست کار میکنه ولی دومین فیلید رو این ارور رو میده(تمام متغر هامم درست کردم)
Violation of PRIMARY KEY constraint 'PK_customer_B'. Cannot insert duplicate key in object 'dbo.customer_B'. The duplicate key value is (100).

اگه فیلد id رو کلیدش رو بردارم تمام id هارو 100 میزنه .
چرا؟

veniz2008
سه شنبه 14 آبان 1392, 17:36 عصر
شرمنده :خجالت:دوست عزیز چه کنیم دیگه تازه اول راهمونه مثل شما که حرفه ای نیستیم..:لبخندساده:
وقتی که اولین فیلد رو میزنم درست کار میکنه ولی دومین فیلید رو این ارور رو میده(تمام متغر هامم درست کردم)
Violation of PRIMARY KEY constraint 'PK_customer_B'. Cannot insert duplicate key in object 'dbo.customer_B'. The duplicate key value is (100).

اگه فیلد id رو کلیدش رو بردارم تمام id هارو 100 میزنه .
چرا؟
ببینید دوست عزیز،
من می تونم ساعت ها بشینم اینجا و واسه شما تایپ کنم و شما هم بدون دقت به کدها و متن خطاها، عینا کدهای منو کپی کنی و توی برنامت قرار بدی.
ولی فایده این کار چیه؟ مطمئن باشید هیچی.
رکورد اول رو درست درج میکنه چون id شماره 100 وجود نداره.
شما پشت سرش میای دوباره 100 رو میخوای درج کنی به همین خاطر بهتون پیغام کیده که کلید اصلی که باید منحصر بفرد باشه نمیتونه Duplicate (دو بار) درج بشه. هر رکوردی که میخواید ثبت کنید باید id اون جدید باشه.
اون کدی که بهتون دادم و گفتم identity رو غیرفعال کنید رو یکبار اجرا کنید و id مد نظرتون رو درج کنید و بعد دوباره identity رو فعال کنید.
قرار نیست شما هر بار بیای identity رو غیر فعال و رکورد رو درج و دوباره اونو فعال کنید. اینطوری اصلا دلیلی برای identity بودن اون فیلد باقی نمیمونه.
هر چیزی رو برای هدف خاص خودش ساختن.
اون کدی که برای غیر فعال کردن identity خدمتتون عرض کردم برای موارد خاص هست نه اینکه همیشه برای هر رکورد بیای ازش استفاده کنی.
پیشنهاد میکنم اول برید مطالب پایه درباره کار با پایگاه داده ها و مفاهیم رو خوب کار کنید. این مفاهیم تا روزی که برنامه نویسی می کنید جلوی شما قرار دارن. وقتی مفاهیم رو خوب یاد بگیری خواهید دید که بسیار لذت بخش خواهد بود و براحتی از پس هر کوئری بر میاید.
موفق باشید.