Jag var inte säker på om du verkligen ville ha en uppdateringsfråga eller en urvalsfråga. Följande fråga returnerar en ny operatör för varje beställning, beroende på dina villkor:
/*
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
Den tilldelade i princip ett nytt ID till raderna för sammanfogningen. Ordningstabellen får ett värde mellan 1 och antalet operatorer, slumpmässigt tilldelade. Detta kopplas sedan till ett sekvensnummer på operatörerna.
Om du behöver uppdatera kan du göra något som:
with toupdate as (<above query>)
update orders
set operatorid = newoperatorid
from toupdate
where toupdate.orderid = orders.orderid
Dina två frågor:
Blir det bättre att först välja alla alla beställningar och alla operatörer som uppfyller villkoren för tillfällig tabell och sedan göra blandningen eller att göra allt i en stor fråga?
Användaren av tillfälliga tabeller är en fråga om prestanda och krav på applikationen. Om data uppdateras snabbt, ja, det är en stor vinst att använda ett tillfälligt bord. Om du kör randomiseringen många, många gånger på samma data, kan det vara en vinst, särskilt om borden är för stora för att få plats i minnet. Annars är det inte troligt att det blir en stor prestandavinst på en engångskörning, förutsatt att du placerar villkoren inom de innersta underfrågorna. Men om prestanda är ett problem kan du testa de två metoderna.
Jag skulle vilja skicka array eller grupper som en parameter till min procedur. Vilket alternativ skulle vara bäst för att skicka array till lagrad procedur (SQL Server 2005).
Hmmm, byt till 2008 som har tabellvärderade parametrar. Här är en mycket referensartikel i ämnet av Erland Sommarskog:http:// www.sommarskog.se/arrays-in-sql-2005.html .