SORU
10 EKİM 2008, Cuma


Veritabanındaki bir tablodan rastgele kayıt (T-SQL)

Kısa ve öz bir şekilde sql server bir tablodan rastgele kayıt almak için var mı?

Birim test verilerimi rastgele etmek istiyorum, çok basit bir yol için bir tablodan rastgele bir kimlik numarası seçmek için arıyorum. İngilizce, seçin "kimliği tablosunda en alt kimliği ve tablodaki en üst kimliği arasında rastgele bir sayı olduğu tablodan tek bir kimlik Seçin." olurdu

Sorguyu çalıştırmak zorunda kalmadan bunu yapmak için bir yol bulmak, boş bir değer için test edemiyorum, sonra yeniden çalıştırın null.

Fikirler?

CEVAP
10 EKİM 2008, Cuma


Kısa ve öz bir şekilde sql server bir tablodan rastgele kayıt almak için var mı?

Evet

SELECT TOP 1 * FROM table ORDER BY NEWID()

Açıklama

NEWID() her bir satır oluşturulur ve tablonun o zaman göre sıralanır. İlk kayıt ("düşük" GUID). bu kayıtla yani döndürülür

Notlar

  1. GUID sürümü dört yana sözde rasgele sayılar oluşturulur:

    Sürüm 4 UUID gerçekten-random olacak biçimde üretmek için tasarlanmıştır ya sözde rasgele sayılar.

    Algoritma aşağıdaki gibidir:

    • En önemli iki bit (bit 6 ve 7) ayarlayın sıfır ve bir, sırasıyla clock_seq_hi_and_reserved.
    • En önemli dört bit (bit 12 ile 15) gelen için time_hi_and_version alan 4-bit sürüm numarası Bölüm 4.1.3.
    • Rastgele (veya pseudo-rastgele) seçilen tüm diğer parçaları ayarlayın değerler.

    - A Universally Unique IDentifier (UUID) URN Namespace - RFC 4122

  2. SELECT TOP 1 * FROM table ORDER BY RAND() çalışmaz alternatif olarak düşünürdüm. RAND() sorgu başına tek bir değer döndürür, böylece tüm satırları aynı değeri paylaşır.

  3. GUID değerleri üretir iken, daha zorlu uygulamalar için daha iyi bir PRNG gerekir.

  4. Tipik performans etrafında 1,000,000 satır&; elbette sistemine bağlı olarak-10 saniyeden az. İmkansız bir dizin vurmak, performans nispeten sınırlı olacaktır böylece unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Le Cargo !

    Le Cargo !

    24 HAZİRAN 2007
  • modica89

    modica89

    24 HAZİRAN 2007
  • Vladimir Jenko

    Vladimir Jen

    1 Mart 2010