Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ponumerowanie wierszy
Morinus83
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 3.11.2010

Ostrzeżenie: (0%)
-----


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ć ;/

Ten post edytował Morinus83 8.11.2010, 09:45:35
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Method
post
Post #2





Grupa: Zarejestrowani
Postów: 177
Pomógł: 6
Dołączył: 14.01.2003
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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


--------------------
"zycia nie mierzy sie liczba oddechow,
ale liczba chwil, ktore zapieraja dech w piersi"
Go to the top of the page
+Quote Post
Morinus83
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 3.11.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował Morinus83 10.11.2010, 10:18:31
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 23:23