sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo insertar valores aleatorios en una tabla de SQL Server?

Cuando el motor de consultas vea esto...

(SELECT TOP 1 [val] FROM @randomStuff ORDER BY NEWID())

... todo es como, "ooooh, una subconsulta escalar almacenable en caché, ¡voy a almacenar eso en caché!"

Debe engañar al motor de consultas para que piense que no se puede almacenar en caché. jfar's respuesta estuvo cerca, pero el motor de consulta fue lo suficientemente inteligente como para ver la tautalogía de MyTable.MyColumn = MyTable.MyColumn , pero no es lo suficientemente inteligente como para ver a través de esto.

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

Al incluir la tabla externa (MT) en la subconsulta, el motor de consulta asume que la subconsulta deberá volver a evaluarse. Cualquier cosa funcionará realmente, pero opté por la clave principal (supuesta) de MyTable.Id, ya que estaría indexada y agregaría muy poca sobrecarga.

Un cursor probablemente sería igual de rápido, pero ciertamente no es tan divertido.