Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ponumerowanie wierszy
Forum PHP.pl > Forum > Bazy danych
Morinus83
Witam, chciałbym na jednej kolumnie z tabeli zrobić updata który ponumerowałby wiersze. Jestem w stanie wyciągnąć te informacje selectem:

  1. SELECT row_number() OVER (ORDER BY duplikat) AS numer FROM dbo.duplikaty


Z tym, że nie wiem jak takie zapytanie umieścić w Update. Coś takiego :

  1. UPDATE dbo.duplikaty SET cosinnego = (SELECT (row_number() OVER (ORDER BY duplikat) FROM dbo.duplikaty))

niestety ale zwraca błąd.


Ktoś ma jakiś pomysł? Ja od rana siedzę nad tym problemem i jakoś nie mogę sobie poradzić ;/
Method
Po pierwsze po co Ci to?
przy każdym wstawianiu rekordu będziesz musial sprawdzac max_id i dodawać jeden.
Ale jak chcesz to utwórz sobie kolumnę i w pętli wypełniaj ją,

Swoja drogą jak się pisze że dostajesz blad to wypadaloby napisać jaki
Morinus83
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'FROM'.


To błąd który dostaje, a baza idzie już do zamknięcia a potrzebuje w niej zmodyfikować tą kolumnę przed zamknięciem, więc problem z późniejsza modyfikacją odpada.

ps: możesz podać przykład takiej pętli?

Dobra dałem jakoś rade, tworze nową tabele z dodatkową kolumną z ponumerowanymi wierszami, potem updatuje tą kolumnę co chciałem i jest cacy. Od tąd zostaje już tylko usunięcie dodatkowej kolumny, wyczyszczenie oryginalnej tabeli i wrzucenie tam wszystkiego z tej. Kod wklejam dla potomnych choć pewnie daleki jest od "eleganckiego" rozwiązania winksmiley.jpg)


Najpierw:

  1. -- Nowa tabela z dodatkową kolumna numeracji
  2. SELECT *, row_number() OVER (ORDER BY ID) AS numer
  3. INTO Nowa
  4. FROM dbo.Excel

Potem:
  1. -- declaracja zmiennych
  2. Declare @wiersz int
  3. SET @wiersz =1
  4. Declare @max int
  5. -- @max = liczba wierszy w tabeli
  6. SET @max = (SELECT count(*) FROM dbo.Nowa)
  7.  
  8. -- pętla autoincrementująca wiersze od @wiersz (domyślnie 1) do @max
  9. WHILE @wiersz <= @max
  10. BEGIN
  11. UPDATE Excel SET kopiowane = @wiersz
  12. WHERE numer=@wiersz
  13. SET @wiersz = @wiersz + 1
  14. END
  15.  
  16. -- koniec ;)


Zapytanie jest megaśnie nieefektywne, choć robi swoje to 56 tys wierszy robiło ponad 50 minut. Ktoś jest wstanie podrzucić jakiś pomysł jak je poprawićquestionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.