Saya tidak yakin apakah Anda benar-benar menginginkan kueri pembaruan atau kueri pemilihan. Kueri berikut mengembalikan operator baru untuk setiap pesanan, sesuai dengan ketentuan Anda:
/*
with orders as (select 1 as orderId, 'order1' as orderDesc, 1 as OperatorId),
operators as (select 1 as operatorID, 'John' as name)
*/
select o.*, op.name as NewOperator, op.operatorID as NewOperatorId
from (select o.*, (ROW_NUMBER() over (order by newid()) % numoperators) + 1 as randseqnum
from Orders o cross join
(select COUNT(*) as numoperators from operators) op
) o join
(select op.*, ROW_NUMBER() over (order by newid()) as seqnum
from Operators op
) op
on o.randseqnum = op.seqnum order by orderid
Itu pada dasarnya menetapkan id baru ke baris untuk bergabung. Tabel pesanan mendapat nilai antara 1 dan jumlah operator, ditetapkan secara acak. Ini kemudian digabungkan ke nomor urut pada operator.
Jika Anda perlu memperbarui, Anda dapat melakukan sesuatu seperti:
with toupdate as (<above query>)
update orders
set operatorid = newoperatorid
from toupdate
where toupdate.orderid = orders.orderid
Dua pertanyaan Anda:
Apakah lebih baik memilih semua pesanan dan semua operator yang memenuhi persyaratan ke tabel sementara terlebih dahulu, lalu melakukan pengocokan atau melakukan semuanya dalam satu kueri besar?
Pengguna tabel sementara adalah masalah kinerja dan persyaratan untuk aplikasi. Jika data diperbarui dengan cepat, maka ya, menggunakan tabel sementara adalah kemenangan besar. Jika Anda menjalankan pengacakan berkali-kali pada data yang sama, maka itu bisa menjadi kemenangan, terutama jika tabel terlalu besar untuk muat di memori. Jika tidak, kemungkinan besar tidak akan ada peningkatan kinerja yang besar dalam satu waktu, dengan asumsi Anda menempatkan kondisi di dalam subkueri terdalam. Namun, jika kinerja menjadi masalah, Anda dapat menguji kedua pendekatan tersebut.
Saya ingin meneruskan array atau grup sebagai parameter ke prosedur saya. Opsi mana yang terbaik untuk meneruskan array ke prosedur tersimpan (SQL Server 2005).
Hmmm, beralih ke 2008 yang memiliki parameter bernilai tabel. Berikut ini adalah artikel referensi tinggi tentang masalah ini oleh Erland Sommarskog:http:// www.sommarskog.se/arrays-in-sql-2005.html .