Nie byłem pewien, czy naprawdę chcesz zapytanie aktualizujące, czy zapytanie wybierające. Poniższe zapytanie zwraca nowy operator dla każdego zamówienia, zgodnie z Twoimi warunkami:
/*
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
Zasadniczo przypisał nowy identyfikator do wierszy łączenia. Tabela kolejności otrzymuje losowo przypisaną wartość od 1 do liczby operatorów. Jest on następnie dołączany do numeru sekwencyjnego operatorów.
Jeśli chcesz zaktualizować, możesz zrobić coś takiego:
with toupdate as (<above query>)
update orders
set operatorid = newoperatorid
from toupdate
where toupdate.orderid = orders.orderid
Twoje dwa pytania:
Czy lepiej będzie najpierw wybrać wszystkie zamówienia i wszystkie operatory spełniające warunki do tabeli tymczasowej, a następnie wykonać tasowanie, czy zrobić to wszystko w jednym dużym zapytaniu?
Użytkownik tabel tymczasowych jest kwestią wydajności i wymagań stawianych aplikacji. Jeśli dane są szybko aktualizowane, to tak, użycie tabeli tymczasowej to wielka wygrana. Jeśli przeprowadzasz randomizację wiele, wiele razy na tych samych danych, może to być wygrana, szczególnie jeśli tabele są zbyt duże, aby zmieścić się w pamięci. W przeciwnym razie nie ma dużego wzrostu wydajności za jednym razem, zakładając, że umieścisz warunki w najgłębszych podzapytaniach. Jeśli jednak wydajność stanowi problem, możesz przetestować oba podejścia.
Chciałbym przekazać tablicę lub grupy jako parametr do mojej procedury. Która opcja byłaby najlepsza do przekazania tablicy do procedury składowanej (SQL Server 2005).
Hmmm, przejdź do 2008, który ma parametry o wartościach stołowych. Oto bardzo referencyjny artykuł Erlanda Sommarskoga na ten temat:http:// www.sommarskog.se/arrays-in-sql-2005.html .