Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak mogę wstawić wartości losowe do tabeli programu SQL Server?

Gdy silnik zapytań zobaczy to...

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

... to wszystko w stylu "ooooh, buforowalne podzapytanie skalarne, będę je buforować!"

Musisz oszukać silnik zapytań, aby pomyślał, że nie można go buforować. jfar odpowiedz było blisko, ale silnik zapytań był na tyle sprytny, aby zobaczyć tautologię MyTable.MyColumn = MyTable.MyColumn , ale nie jest wystarczająco sprytny, aby to przejrzeć.

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

Wprowadzając tabelę zewnętrzną (MT) do podzapytania, silnik zapytań zakłada, że ​​podzapytanie będzie wymagało ponownej oceny. Wszystko będzie działać naprawdę, ale wybrałem (zakładany) klucz podstawowy MyTable.Id, ponieważ byłby on indeksowany i powodowałby bardzo małe obciążenie.

Kursor prawdopodobnie byłby równie szybki, ale z pewnością nie jest tak zabawny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Po usunięciu kaskady dla tabeli samoodnoszącej się

  2. Invoke-Sqlcmd :Wystąpił błąd związany z siecią lub specyficzny dla wystąpienia podczas nawiązywania połączenia z programem SQL Server

  3. Łączenie ciągów za pomocą ścieżki xml

  4. Jak łączyć ciągi i wartości NULL w SQL Server

  5. Entity Framework 4 Tabela na hierarchię — jak zdefiniować właściwości nawigacyjne u dzieci?