Considerate questi dati:tavolo aggiornamenti tramite casuale di valori multipli in altra tabella
CREATE TABLE #Data (DataID INT, Code VARCHAR(2), Prefix VARCHAR(3))
INSERT INTO #Data (DataID, Code)
VALUES (1, 'AA')
, (2, 'AA')
, (3, 'AA')
, (4, 'AA')
, (5, 'AA')
, (6, 'AA')
CREATE TABLE #Prefix (Code VARCHAR(2), Prefix VARCHAR(3))
INSERT INTO #Prefix (Code, Prefix)
VALUES ('AA', 'ABC')
, ('AA', 'DEF')
, ('AA', 'GHI')
, ('AA', 'JKL')
voglio impostare il valore Prefix
in #Data
essere un caso Prefix
da #Prefix
con un corrispondente Code
.
Utilizzando una scala inner join
solo si traduce in un valore in uso:
UPDATE D
SET Prefix = P.Prefix
FROM #Data AS D
INNER JOIN #Prefix AS P ON D.Code = P.Code
Leggendo le altre domande su qui, NEWID()
è raccomandato come un modo di ordinare in modo casuale qualcosa. Cambiare il join
a:
SELECT TOP 1 subquery ordering by NEWID()
ancora seleziona solo un singolo valore (anche se casuale ogni volta) per ogni riga:
UPDATE D
SET Prefix = (SELECT TOP 1 P.Prefix FROM #Prefix AS P WHERE P.Code = D.Code ORDER BY NEWID())
FROM #Data AS D
Quindi, io non sono sicuro di come ottenere un prefisso casuale per ogni inserimento dati da una singola dichiarazione di aggiornamento. Potrei probabilmente fare un qualche tipo di loop attraverso il tavolo #Data
, ma evito di toccare mai i loop in SQL
e sono sicuro che sarebbe lento. L'effettiva applicazione di questo sarà su decine di migliaia di record, con centinaia di prefissi per dozzine di codici.