Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Cách lấy giá trị của cột sao cho unique trên mỗi lần gọi

  1. #1
    Ngày gia nhập
    02 2012
    Bài viết
    1

    Lightbulb Cách lấy giá trị của cột sao cho unique trên mỗi lần gọi

    Xin chào mọi người, có bác nào có kinh nghiệm hoặc đã gặp vấn đề này rồi thì trả lời giúp với
    Hiện tại, trong db mình có:
    1. Bảng tblABC(colNumber, colIsActive).
    2. Một store procedure spGetNumber, tác dụng:
    2.1. Select @X = Min(colNumber) of tblABC where colIsActive=0
    2.2. Thực hiện abxc, xyz.... (nói chung có thể tốn 1 khoảng time)
    2.3. Update tblABC set colIsActive=1 where colNumber = @X
    2.4. Output @X
    (Thứ tự là vậy, ko thay đổi được)

    Vấn đề: spGetNumber này sẽ được gọi liên tục, có thể đồng thời trên các connection khác nhau, nhưng làm sao phải đảm bảo lấy giá trị @X không đc trùng lắp.

    Mình đang nghĩ tới lock, nhưng tài liệu về nó lan man quá...
    Bác nào đã gặp trường hợp này hoặc tương tự, cho ý kiến tham khảo với, thank các bác trước.

  2. #2
    Ngày gia nhập
    08 2017
    Bài viết
    1,820

    Cụ thể hơn, như trên thì mơ hồ quá.

    Sql với 4 thao tác CRUD (tạo, đọc, sửa và xóa) không phải lúc nào cũng cần cái duy nhất - unique.
    Có những công việc đặc thù cần tới nó, in mã vạch cho sản phẩm, cấp phát CMND, sID cho người dân cần đến nó.

    Thích thì xem:
    http://diendan.congdongcviet.com/threads/t401358::phan-mem-tao-so-serial.cpp

  3. #3
    Ngày gia nhập
    03 2009
    Bài viết
    207

    Sử dụng cấu trúc SELECT...FOR UPDATE....

    Code:
    2.1. Select @X = Min(colNumber) of tblABC where colIsActive=0 FOR UPDATE (lock)
    2.2. Thực hiện abxc, xyz.... (nói chung có thể tốn 1 khoảng time)
    2.3. Update tblABC set colIsActive=1 where colNumber = @X (unlock)
    Đã được chỉnh sửa lần cuối bởi hvcuongit : 16-01-2018 lúc 11:30 AM.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn