Ответ 1
Вы можете сделать заказ на NEWID, чтобы получить случайное число для каждой строки вашего обновления.
UPDATE
Products
SET
DefaultImageId =
(
SELECT TOP 1
Id
FROM
Images
WHERE
Images.ProductId = Products.Id
ORDER BY
NEWID()
)
Это было отмечено и добавлены комментарии, указывающие, что это не решает проблему. Я думаю, что путаница возникла из-за того, что люди не поняли, что первоначальный вопрос требует, чтобы для каждого продукта было выбрано случайное изображение, отсюда и пункт where с Product Id. Предоставили полный сценарий с набором данных ниже. Он добавляет пять продуктов и три изображения для каждого продукта. Затем случайным образом устанавливает идентификатор изображения по умолчанию для каждого продукта.
CREATE TABLE Products(Id INT, Name NVARCHAR(100), DefaultImageId INT NULL)
CREATE TABLE Images (Id INT, ProductId INT, Bytes VARBINARY(100))
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(1, 'A', NULL)
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(2, 'B', NULL)
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(3, 'C', NULL)
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(4, 'D', NULL)
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(5, 'E', NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(1, 1, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(2, 1, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(3, 1, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(4, 2, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(5, 2, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(6, 2, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(7, 3, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(8, 3, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(9, 3, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(10, 4, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(11, 4, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(12, 4, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(13, 5, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(14, 5, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(15, 5, NULL)
UPDATE
Products
SET
DefaultImageId =
(
SELECT TOP 1
Id
FROM
Images
WHERE
Images.ProductId = Products.Id
ORDER BY
NEWID()
)
SELECT * FROM Products