Đăng ký vps giá rẻ, tên miềndomain. Việc kiểm tra và mua tên miền giá rẻ, domain giá rẻ, hosting giá rẻ, máy chủ ảo giá rẻserver giá rẻ chỉ với 2 bước đơn giản. Giúp bạn tiên phong trong kinh doanh Online

SQL Server
 9ecva.com - 9e Chu Van An Forever : SQL Server
Tiêu đề Chủ đề: Reset ID tăng tự động trong Sqlserver 2000 ? Trả lời bài viếtGửi bài viết mới
Tác giả
Nội dung << Chủ đề trước | Chủ đề kế tiếp >>
DUCVINH83
Administrator
Administrator
Avatar
Không ngừng học hỏi !

Ngày gia nhập: 01/11/2005
Giới tính:
Đến từ: Vietnam
Trạng thái:
Bài viết: 365
Tiền: 738$
Địa chỉ e-mail: Gửi mail
Yahoo! IM: Yahoo! IM
Sinh nhật: 17/02/1983
Cảnh cáo: (0%)
Minus 1 warningCurrent warnlevel: 0%Add 1 warning
Ngày gửi: 22/01/2010 lúc 11:01 sáng | Đã khóa IP Trích dẫn DUCVINH83

dkthien
05-28-2009, 12:28 PM
Đính chính bài trên một chút, e xem lại nhé:
Ở đây mình sẽ có một số lệnh về vấn đề ResetID

1. DBCC CHECKIDENT(TableName,NORESEED)
+ Lệnh này chỉ đơn thuần trả về giá trị identity (*) hiện tại và giá trị ID lớn nhất (**) trong bảng.
+ VD dãy ID: 4,5,6 => khi reset ID bắt đầu lại từ 0 và thực hiện INSERT thêm 2 bản ghi khi đó được dãy mới ID: 1,2,4,5,6 => (*) sẽ là: 2 và (**) sẽ là: 6
+ Vậy lệnh này chỉ dùng để xem thông tin

2. DBCC CHECKIDENT(TableName,RESEED) hoặc DBCC CHECKIDENT(TableName)
+ Lệnh này làm cho ID luôn bắt đầu bằng giá trị ID lớn nhất có trong bảng
+ VD: Có dãy ID: 4,5,6
- Bước 1: Reset ID bắt đầu lại từ 0
- Bước 2: Thực hiện INSERT thêm 2 bản ghi khi đó được dãy mới ID: 1,2,4,5,6
- Bước 3: Chạy lệnh trên (lệnh 2)
- Bước 4: INSERT thêm 1 bản ghi nữa ta được dãy mới là ID: 1,2,4,5,6,7
##### Vậy nếu thực hiện Bước 3 thì ID sẽ bắt đầu từ giá trị lớn nhất trong dãy ID ở Bước 2 là: 6, nếu không thực hiện Bước 3 thì sau khi bước 4 thực hiện xong được dãy ID: 1,2,3,4,5,6

3. DBCC CHECKIDENT(TableName,RESEED, NewResetValues)
+ Lệnh này cho phép ta đặt lại giá trị bắt đầu của ID (NewResetValues)
+ VD: có dãy ID: 4,5,6
- Bước 1: Chạy lệnh trên (lệnh 3) như sau: DBCC CHECKIDENT(TableName,RESEED, 0) => ID cũ là 0
- Bước 2: INSERT thêm 3 bản ghi ta được dãy ID: 1,2,3,4,5,6
- Vậy ID mới = ID cũ + current increment value
- Tuy nhiên khi INSERT thêm 1 bản ghi nữa thì xuất hiện lỗi trùng khóa ở trong SQL => Vì sao? ( Yes! ). Còn bỏ qua lỗi đó cứ tiếp tục INSERT 3 lần nữa thì được dãy ID: 1,2,3,4,5,6,7

*****
Vậy nếu e muốn giải quyết bài toán của mình thì cần phải thiết kế một thuật toán riêng để kiểm tra khoảng trống trong dãy ID (Khoảng trống là các ID bị xóa) rồi kết hợp với 3 lệnh trên để xác định vị trí bắt đầu rồi, điền dữ liệu, đến đâu thì nhảy tới khoảng trống khác(nếu còn) và làm tiếp như vậy.

Tham khảo thêm ở Microsoft Link này:
http://msdn.microsoft.com/en-us/library/aa258817(SQL.80).a spx




__________________

YM: DUCVINH83
0912 822334


Lên trên Xem DUCVINH83's Thông tin cá nhân Tìm những bài viết khác của DUCVINH83 Ghé thăm DUCVINH83's Trang chủ
 
DUCVINH83
Administrator
Administrator
Avatar
Không ngừng học hỏi !

Ngày gia nhập: 01/11/2005
Giới tính:
Đến từ: Vietnam
Trạng thái:
Bài viết: 365
Tiền: 738$
Địa chỉ e-mail: Gửi mail
Yahoo! IM: Yahoo! IM
Sinh nhật: 17/02/1983
Cảnh cáo: (0%)
Minus 1 warningCurrent warnlevel: 0%Add 1 warning
Ngày gửi: 22/01/2010 lúc 11:02 sáng | Đã khóa IP Trích dẫn DUCVINH83

HcCuongMeocH
06-20-2009, 03:58 PM
không biết có giúp được gì bạn không

Đây là 1 hàm khá hay trong cơ sở dữ liệu . Hàm này sẽ tự động tìm ra số còn thiếu trong bảng và cung cấp số đó cho dòng dữ liệu mới nhất được thêm vào.Ví dụ 1,2,...5 thì số còn thiếu là 3 và 4 .Số ta có ở lần chạy đầu sẽ là 3, lần sau sẽ là 4.
Hàm này sử dụng khi số thứ tự đó không có nhiều ý nghĩa mà chỉ dùng quản lý.Ví dụ như bảng user(UserID,UserName,Password),
trường UserID chỉ dùng để quản lý không mang nhiều ý nghĩa.

create function SoThuTu()
returns int
as
begin
declare @stt int
with bangtam as
(
select UserID from user where UserID + 1 not in
(select UserID from user)
union all
select 1 from user where not exists
(select 1 from user where UserID = 1)
)
select @stt = min(UserID) from bangtam
return @stt + 1
end

select dbo.SoThuTu()


__________________

YM: DUCVINH83
0912 822334


Lên trên Xem DUCVINH83's Thông tin cá nhân Tìm những bài viết khác của DUCVINH83 Ghé thăm DUCVINH83's Trang chủ
 
DUCVINH83
Administrator
Administrator
Avatar
Không ngừng học hỏi !

Ngày gia nhập: 01/11/2005
Giới tính:
Đến từ: Vietnam
Trạng thái:
Bài viết: 365
Tiền: 738$
Địa chỉ e-mail: Gửi mail
Yahoo! IM: Yahoo! IM
Sinh nhật: 17/02/1983
Cảnh cáo: (0%)
Minus 1 warningCurrent warnlevel: 0%Add 1 warning
Ngày gửi: 22/01/2010 lúc 12:30 chiều | Đã khóa IP Trích dẫn DUCVINH83

Ừm cái  lệnh này hay quá, tìm mãi mới thấy, sử dụng rất hiệu quả. Dùng được cho cả SQL Server 2005 đó bà con ...

__________________

YM: DUCVINH83
0912 822334


Lên trên Xem DUCVINH83's Thông tin cá nhân Tìm những bài viết khác của DUCVINH83 Ghé thăm DUCVINH83's Trang chủ
 

Nếu bạn muốn trả lời thì trước tiên bạn phải đăng nhập
Nếu chưa đăng ký thì bạn hãy đăng ký

  Trả lời bài viếtGửi bài viết mới
Xem trang in Xem trang in

Di chuyển nhanh
Bạn không thể tạo đề tài mới
Bạn không thể trả lời bài viết
Bạn không thể xoá bài viết bạn đã gưi
Bạn không thể sửa bài viết bạn đã gửi
Bạn không thể tạo bình chọn
Bạn không thể bình chọn



Trang này được tạo ra trong 0.1719 giây.
cheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salesac longchamp pas chergucci outlet

baomang.net  9ecva.com © 2007 - Phát triển bởi Trịnh Đức Vinh