Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sử dụng cột thứ tự sắp xếp trong bảng cơ sở dữ liệu

Update product set order = order+1 where order >= @value changed

Mặc dù theo thời gian, bạn sẽ nhận được các "khoảng trắng" ngày càng lớn theo thứ tự của mình nhưng nó vẫn sẽ "sắp xếp"

Điều này sẽ thêm 1 vào giá trị đang được thay đổi và mọi giá trị sau nó trong một câu lệnh, nhưng câu lệnh trên vẫn đúng. các "khoảng trắng" lớn hơn và lớn hơn sẽ hình thành theo thứ tự của bạn có thể vượt quá giá trị INT.

Giải pháp thay thế được đưa ra mong muốn không có khoảng trống:

Hãy tưởng tượng một thủ tục cho:UpdateSortOrder với các tham số của @NewOrderVal, @ IDToChange, @ OriginalOrderVal

Quy trình hai bước tùy thuộc vào việc đơn hàng mới / cũ đang di chuyển lên hay xuống loại.

If @NewOrderVal < @OriginalOrderVal --Moving down chain 

--Create space for the movement; no point in changing the original 
    Update product set order = order+1 
    where order BETWEEN @NewOrderVal and @OriginalOrderVal-1;

end if

If @NewOrderVal > @OriginalOrderVal --Moving up chain

--Create space  for the momvement; no point in changing the original  
  Update product set order = order-1 
  where order between @OriginalOrderVal+1 and @NewOrderVal
end if

--Finally update the one we moved to correct value

    update product set order = @newOrderVal where [email protected];

Về thực hành tốt nhất; hầu hết các môi trường tôi đã ở thường muốn thứ gì đó được nhóm theo danh mục và sắp xếp theo thứ tự bảng chữ cái hoặc dựa trên "mức độ phổ biến khi bán", do đó phủ nhận nhu cầu cung cấp loại do người dùng xác định.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thủ thuật điều chỉnh hiệu suất yêu thích

  2. Tăng trưởng kích thước cơ sở dữ liệu SQL Server bằng lịch sử sao lưu

  3. Truy vấn được tham số hóa ..... yêu cầu tham số '@units', không được cung cấp

  4. Cách khắc phục “Tên tương quan phải được chỉ định cho tập hợp hàng loạt trong mệnh đề from.” trong SQL Server

  5. Kết nối với SQL Server 2012 bằng sqlalchemy và pyodbc