クエリエンジンがこれを確認すると...
(SELECT TOP 1 [val] FROM @randomStuff ORDER BY NEWID())
...それはすべて、「ああ、キャッシュ可能なスカラーサブクエリです。キャッシュします!」のようなものです。
クエリエンジンをだまして、キャッシュできないと思わせる必要があります。 jfarのMyTable.MyColumn = MyTable.MyColumn
のトータロジーを確認するのに十分なほどスマートでした。 、しかし、これを透視するほど賢くはありません。
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
外部テーブル(MT)をサブクエリに取り込むことにより、クエリエンジンは、サブクエリを再評価する必要があると想定します。何でも実際に機能しますが、MyTable.Idの(想定される)主キーを使用しました。これは、インデックスが作成され、オーバーヘッドがほとんど追加されないためです。
カーソルはおそらく同じくらい速いでしょうが、確かにそれほど楽しくはありません。