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

Bản ghi ngẫu nhiên từ một bảng cơ sở dữ liệu (T-SQL)

Có cách nào ngắn gọn để lấy một bản ghi ngẫu nhiên từ bảng máy chủ sql không?

SELECT TOP 1 * FROM table ORDER BY NEWID()

Giải thích

A NEWID() được tạo cho mỗi hàng và bảng sau đó được sắp xếp theo nó. Bản ghi đầu tiên được trả về (tức là bản ghi có GUID "thấp nhất").

Ghi chú

  1. GUID được tạo dưới dạng số giả ngẫu nhiên kể từ phiên bản bốn:

    UUID phiên bản 4 dành cho việc tạo UUID từ các số thực sự ngẫu nhiên hoặc giả ngẫu nhiên.

    Thuật toán như sau:

    • Đặt hai bit quan trọng nhất (bit 6 và 7) của theclock_seq_hi_and_reserved tương ứng thành 0 và một.
    • Đặt 4 bit quan trọng nhất (bit 12 đến 15) của trường thetime_hi_and_version thành số phiên bản 4 bit từ Phần 4.1.3.
    • Đặt tất cả các bit khác thành các giá trị được chọn ngẫu nhiên (hoặc giả ngẫu nhiên).

    —Một không gian tên URN ID nhận dạng duy nhất (UUID) - RFC 4122

  2. Thay thế SELECT TOP 1 * FROM table ORDER BY RAND() sẽ không hoạt động như người ta nghĩ. RAND() trả về một giá trị duy nhất cho mỗi truy vấn, do đó tất cả các hàng sẽ chia sẻ cùng một giá trị.

  3. Mặc dù các giá trị GUID là giả ngẫu nhiên, bạn sẽ cần một PRNG tốt hơn cho các ứng dụng đòi hỏi khắt khe hơn.

  4. Hiệu suất điển hình là dưới 10 giây cho khoảng 1.000.000 hàng - tất nhiên tùy thuộc vào hệ thống. Lưu ý rằng không thể đạt được một chỉ mục, do đó hiệu suất sẽ tương đối hạn chế.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để tìm ra những gì đang khóa bảng của tôi?

  2. Toán tử logic AND trong SQL Server là gì - Hướng dẫn sử dụng SQL Server / TSQL Phần 120

  3. Giải thích về ANSI_NULLS của Máy chủ SQL

  4. Tạo một cột được tính toán trong SQL Server bằng T-SQL

  5. Cách kiểm tra cài đặt ANSI_NULLS của phiên trong SQL Server