Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso inserir valores aleatórios em uma tabela do SQL Server?


Quando o mecanismo de consulta vê isso...
(SELECT TOP 1 [val] FROM @randomStuff ORDER BY NEWID())

... é tudo como, "ooooh, uma subconsulta escalar em cache, eu vou armazenar isso em cache!"

Você precisa enganar o mecanismo de consulta para pensar que não pode ser armazenado em cache. resposta estava próximo, mas o mecanismo de consulta foi inteligente o suficiente para ver a tautalogia de MyTable.MyColumn = MyTable.MyColumn , mas não é inteligente o suficiente para ver através disso.
UPDATE MyTable
   SET MyColumn = (SELECT TOP 1 val
                     FROM @randomStuff r
                          INNER JOIN MyTable _MT
                                  ON M.Id = _MT.Id
                    ORDER BY NEWID())
 FROM MyTable M

Ao trazer a tabela externa (MT) para a subconsulta, o mecanismo de consulta assume que a subconsulta precisará ser reavaliada. Qualquer coisa funcionará realmente, mas eu fui com a chave primária (assumida) de MyTable.Id, pois seria indexada e adicionaria muito pouca sobrecarga.

Um cursor provavelmente seria tão rápido, mas certamente não é tão divertido.