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

SQL Server 2005 ROW_NUMBER() bez ORDER BY

Możesz uniknąć określania wyraźnej kolejności w następujący sposób:

INSERT dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
      + Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};

Należy jednak pamiętać, że jest to tylko sposób na uniknięcie określania zamówienia i NIE gwarantuje że zachowana zostanie jakakolwiek oryginalna kolejność danych. Istnieją inne czynniki, które mogą spowodować uporządkowanie wyniku, takie jak ORDER BY w zewnętrznym zapytaniu. Aby to w pełni zrozumieć, należy zdać sobie sprawę, że pojęcie „nie uporządkowane (w określony sposób)” to nie to samo, co „zachowanie pierwotnego porządku” (który JEST uporządkowany w określony sposób!). Uważam, że z perspektywy czystej relacyjnej bazy danych ta druga koncepcja nie istnieje , z definicji (chociaż mogą istnieć implementacje baz danych, które to naruszają, SQL Server nie jest jedną z nich).

Powodem podpowiedzi blokujących jest zapobieganie sytuacji, w której jakiś inny proces wstawia wartość, której planujesz użyć, pomiędzy częściami wykonywanych zapytań.

Uwaga:wiele osób używa (SELECT NULL) aby ominąć ograniczenie "brak stałych dozwolonych w klauzuli ORDER BY funkcji okienkowej". Z jakiegoś powodu wolę 1 ponad NULL .

Ponadto:myślę, że kolumna tożsamości jest znacznie lepsza i powinna być używana zamiast tego. W przypadku współbieżności blokowanie wyłącznie całych tabel nie jest dobre. Niedopowiedzenie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL — wywołanie procedury składowanej dla każdego rekordu

  2. Unikaj nazywania procedur przechowywanych przez użytkownika SP% lub SP_%

  3. Jak filtrować obiekty w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL, część 19

  4. Wartość kolumny tożsamości nagle skacze do 1001 na serwerze sql

  5. Cloud Migration 101:przejście z programu SQL Server na platformę Azure