|
|
|
[ASp.net#VB]การกำหนด Identity ของ SQl Server ถ้า อันดับนั้นถูกลบไปแล้ว จะกลัลบมาใช้ยังไงครับ |
|
|
|
|
|
|
|
ได้ครับ แต่ต้องเขียน function เพื่มเพื่อตรวจสอบและนำมาใช้ใหม่เองครับ ในส่วนของ identity จะเพื่มค่าไปเรื่อยๆ อย่างเดียวครับ แต่ถ้าต้องการจะ reset หรือจะกำหนดให้ไปเริ่มที่เท่าไรก็มีคำสั่งครับ
USE pubs
GO
DBCC CHECKIDENT ( jobs, RESEED, 100 )
GO
สีน้ำเงินก็คือชื่อ table
สีแดงก็คือตัวแลขที่อยากจะกำหนด
|
ประวัติการแก้ไข 2010-09-19 17:02:38 2010-09-19 17:03:43 2010-09-19 17:04:14
|
|
|
|
Date :
2010-09-19 17:01:43 |
By :
salapao_codeman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าจะให้มัน เช็ค auto อ่ะครับ
หรือ code ที่ท่านให้มา ใช้ยังไงครับ
อ่านแล้ว ผม งง อ่ะครับ รบกวนด้วย
|
|
|
|
|
Date :
2010-09-19 19:08:43 |
By :
ang89gunner |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็เขียน funtion ไว้ก่อนจะ insert ไง
ก็ต้องการ 2 funtion อ่ะนะ
อันนึงคือเอาไว้หาค่ามากสุดของ ID เก็บไว้ก่อน
สมมุติ function ชื่อ GetMaxID() ก็ตามชื่อ
อีกอันก็ไว้หาค่า ID ว่าง
สมมุติ function ชื่อ FindEmptyID()
โดยที่ function นี้จะหาค่าต่ำสุด และสูงสุดของเลข ID ไว้ก่อน แล้วก็จะวิ่งหาในนั้น เช่นถ้าค่า ID ต่ำสุด = 10 สูงสุด = 90 ก็จะเริ่มวิ่งตั้งกะ
10++ ไปเรื่อยๆ เจอเลข ID ไหนที่ว่างอยู่ใน table ก็คืนค่ากลับมาเป็น ตัวเลขให้
แล้วตรงส่วนที่กดปุ่ม submit หรือ save เพื่อจะเพิ่มข้อมูลเข้าไปก็เช็คก่อน
maxID = GetMaxID()
chkID = FindEmptyID()
if chkID > 0 then <- ถ้าเจอ ID ว่างก็เอา ID นั้นมา insert เข้า
'อันนี้ทำให้ค่า ID เป็นค่าที่ต้องการจะเพิ่ม -1 เช่นอยากจะเพิ่ม ID = 5 ก็ต้องทำให้ค่า identity มันเป็น 4 เวลานั้น database มันจะบวกเพิ่มเอง
sSQL = "DBCC CHECKIDENT ( table_name, RESEED," & chkID-1 & " )"
cmd.Executenonquery(ssql)
'อันนี้ก็ insert ข้อมูลตามปกติ
sSQL = "insert into table_name(data1,data2) values('Test','Test')"
cmd.Executenonquery(ssql)
'หลังจากนั้น อันนี้ก็ทำให้ค่า ID กลับไปอยู่ค่าสูงสุดเหมือนเดิม
sSQL = "DBCC CHECKIDENT ( table_name, RESEED," & maxID & " )"
cmd.Executenonquery(ssql)
else <- ถ้าไม่เจอ ID ว่างก็ให้ ID มัน auto ของมันเอง
'อันนี้กรณีไม่เจอค่าว่าง ก็ให้ insert ไปตามปกติ
sSQL = "insert into table_name(data1,data2) values('Test','Test')"
end if
แต่อยากจะบอกว่า วิธีนี้มีข้อเสียคือจะทำให้การ insert ข้อมูลเราช้าไปด้วยยิ่งถ้า table นั้นๆ มีจำนวน record เยอะมากๆล่ะก็นานแน่ๆ
เพราะงั้นก็ไม่ต้องไปสนใจมันหรอกมันจะว่าง จะแหว่งไปก็ เราตั้งมาอย่างนี้แล้วก็ไปข้างหน้าอย่างเดียวเลยดีกว่าไม๊ ลองดูด้วยตัวเองครับ
|
ประวัติการแก้ไข 2010-09-20 02:00:48
|
|
|
|
Date :
2010-09-20 01:58:37 |
By :
salapao_codeman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|