Мы записали плагин для нашего IDE (IntelliJ в нашем случае), который следит, сколько потрачено времени на проект автоматически. API IDE позволяет Вам перечислить для событий как редактирования, изменяя окна, и т.д., таким образом, мы регистрируем запись каждый раз, когда что-то как этот происходит. Модуль создания отчетов смотрит на это необработанные данные и определяет общее время, проведенное на проект путем сравнения меток времени между записями. Если различие больше, чем 5 минут, оно предполагает, что никакая работа не была сделана в это время.
Это не прекрасно, и это не на 100% точно, но Вы действительно устраняете все подслушавшее из ручного отслеживания этого материала сами через некоторый внешний инструмент.
Вы можете сделать заказ с помощью NEWID, чтобы получить случайное число для каждой строки вашего обновления.
UPDATE
Products
SET
DefaultImageId =
(
SELECT TOP 1
Id
FROM
Images
WHERE
Images.ProductId = Products.Id
ORDER BY
NEWID()
)
Это было помечено вниз, и добавлены комментарии, указывающие, что это не решает проблему. Я думаю, что путаница возникла из-за того, что люди не поняли, что исходный вопрос требует, чтобы для каждого продукта было выбрано случайное изображение, отсюда и предложение where с идентификатором продукта. Предоставили полный сценарий с набором данных ниже. Он добавляет пять продуктов и три изображения для каждого продукта. Затем случайным образом устанавливает идентификатор изображения по умолчанию для каждого продукта.
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
Проверьте это.
Update Products
Set DefaultImageId = (
SELECT top 1 Id
From Images
Where 1=1
and Products.Id = Images.ProductId
ORDER BY NEWID()
)