xem xét dữ liệu này:Cập nhật bảng sử dụng ngẫu nhiên của nhiều giá trị trong bảng khác
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')
Tôi muốn thiết lập giá trị Prefix
trong #Data
là một ngẫu nhiên Prefix
từ #Prefix
với một phù hợp với Code
.
Sử dụng một thẳng inner join
chỉ dẫn đến một giá trị được sử dụng:
UPDATE D
SET Prefix = P.Prefix
FROM #Data AS D
INNER JOIN #Prefix AS P ON D.Code = P.Code
Từ đọc các câu hỏi khác về đây, NEWID()
được khuyến cáo như là một cách để đặt hàng một cách ngẫu nhiên một cái gì đó. Thay đổi join
tới:
SELECT TOP 1 subquery ordering by NEWID()
vẫn chỉ chọn một giá trị duy nhất (mặc dù ngẫu nhiên mỗi lần) cho mỗi hàng:
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
Vì vậy, tôi không chắc chắn làm thế nào để có được một tiền tố ngẫu nhiên cho mỗi nhập dữ liệu từ một câu lệnh cập nhật duy nhất. Tôi có thể có thể làm một số loại vòng lặp thông qua các bảng #Data
, nhưng tôi tránh bao giờ chạm vào vòng trong SQL
và tôi chắc chắn rằng sẽ được làm chậm. Ứng dụng thực tế này sẽ có trên hàng chục nghìn bản ghi, với hàng trăm tiền tố cho hàng tá mã.