Tôi không chắc bạn thực sự muốn truy vấn cập nhật hay truy vấn chọn lọc. Truy vấn sau đây trả về một toán tử mới cho mỗi đơn đặt hàng, tùy thuộc vào điều kiện của bạn:
/*
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
Về cơ bản, nó đã gán một id mới cho các hàng để tham gia. Bảng thứ tự nhận một giá trị từ 1 đến số lượng toán tử, gán ngẫu nhiên. Sau đó, nó được kết hợp với một số thứ tự trên các toán tử.
Nếu bạn cần cập nhật, bạn có thể làm như sau:
with toupdate as (<above query>)
update orders
set operatorid = newoperatorid
from toupdate
where toupdate.orderid = orders.orderid
Hai câu hỏi của bạn:
Sẽ tốt hơn nếu trước tiên chọn tất cả các đơn đặt hàng và tất cả các toán tử đáp ứng các điều kiện vào bảng tạm thời và sau đó thực hiện xáo trộn hay thực hiện tất cả trong một truy vấn lớn?
Người sử dụng các bảng tạm thời là vấn đề về hiệu suất và các yêu cầu đối với ứng dụng. Nếu dữ liệu đang được cập nhật nhanh chóng, thì có, sử dụng bảng tạm thời là một chiến thắng lớn. Nếu bạn đang chạy ngẫu nhiên nhiều lần trên cùng một dữ liệu, thì đó có thể là một chiến thắng, đặc biệt nếu các bảng quá lớn để vừa với bộ nhớ. Nếu không, sẽ không có khả năng đạt được hiệu suất lớn trong một lần chạy, giả sử bạn đặt các điều kiện trong các truy vấn con trong cùng. Tuy nhiên, nếu hiệu suất là một vấn đề, bạn có thể kiểm tra hai cách tiếp cận.
Tôi muốn chuyển mảng hoặc nhóm làm tham số cho thủ tục của mình. Tùy chọn nào sẽ là tốt nhất để chuyển mảng sang thủ tục được lưu trữ (SQL Server 2005).
Hmmm, chuyển sang 2008 có các tham số có giá trị bảng. Đây là một bài viết mang tính tham khảo cao về chủ đề này của Erland Sommarskog: http:// www.sommarskog.se/arrays-in-sql-2005.html .