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
Morinus83
post
Post #2





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 (IMG:style_emoticons/default/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ć(IMG:style_emoticons/default/questionmark.gif)

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

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 19:01