Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%)
|
Nie za wiele działałem z triggerami i mam problem.
Ułożyłem takiego triggera:
Trigger ma za zadanie zrobić update na danej tabli ,kiedy zostaje wykonany update na tabeli gdzie ustawiony jest ten triger. Po dokonaniu płatności do tabeli płatności updatowana jest kolumna zaplacono(ustawiony status). tabela jest powiązana z tabelą finanse ,gdzie są nazwy sklepu,przedmiotu, ilość zakupionych produktów,a ta zkolei powiązana jest z tabelą klient(to chyba mało ważne).Ważne są te dwie tabele finanse i płatności. Po updatowaniu chciałem użyć wyzwalacza który by zliczył ilość wszystkich zakupionych przedmiotów o konkretnej nazwie ze statusem zakupiono i updatować całkiem inną /inne tabele [@TypSklepu].Użyłem parametru bo przedmioty mogą znajdować się w różnych tabelach o tej samej strukturze. Tymczasem wyskoczyło mi internal server error (500). Nie wiem czy w ogóle mogę tu użyć triggera. Wygląda to tak- dokonuje zakupu przykładowo rower,rolki,piłka zapisują się w tabeli finanse zaś wszelkie dane adresowe do tabeli klient, w osobnej tabeli płatności zapisuje się status.Te trzy tabele są w mniejszym lub większym stopniu ze sobą powiązane. Teraz dokonuję zapłaty za przedmiot i updatuje tabele płatności i bezpośredni w tabeli finanse dla każdego przedmiotu muszę zliczyć/sumować liczbę wszystkich które zostały zakupione.Nie mam pojęcia jak to fajnie rozwiązać, dlatego proszę o radę.Czy triger do tego się nadaje? Ten post edytował Niktoś 26.05.2012, 22:01:05 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%)
|
Niestety coś nie działa, nie ma błedów lecz nie updatuje. Nie mogę znaleźć przyczyny tego powodu.Próbowałem jeszce kombinować ze złączeniami join usuwać pojedynczo lecz bez powodzenia.Być może przyczyną jest ,że nie znajduje żadnego rekordu, a że kolumna jest typu int to updatuje stary rekord w którym jest default 0, a więc updatuje to samo.
Cieżko wogóle stwierdzić , czy triger wykonuje polecenie lub nie.Spróbuje jeszce dodać qwerende z poleceniem is null i updatować do wartości 1 i zobaczyć czy triger wogóle działa. Miej więcej wiem gdzie leży błąd ,tylko nie umiem z nim sobie poradzić: Cytat DECLARE @sql nvarchar(4000) DECLARE @vSuma varchar(256) SET @vSuma = CAST(@Suma AS nvarchar(50)) SET @sql = 'UPDATE [' + @TypSklepu + '] SET iloscSprzedanych=iloscSprzedanych+ ' + @vSuma + ' WHERE NazwaProduktu= ' + @NazProduktu + ';' EXEC sp_executesql @sql loscSprzedanych- musiałem zmienić typ kolumny z int na nvarchar aby updatowało- dodatkowo-wykonanie dodawania na tej samej kolumnie loscSprzedanych=iloscSprzedanych+ ' + @vSuma chyba nie zadziała dla typu nvarchar-nie wiem jak to rozwiązac. Kolejny problem NazwaProduktu= ' + @NazProduktu + ';' - błąd inwalid kolumn name konik- z tym to już nie wiem o co chodzi , @NazProduktu="konik" ,który jest nazwą produktu(wartością), a nie nazwą kolumny. Innymi słowy ,trigger updatuje do tak skonstruowanej kwerendy:
Tego chyba nie da rady zrobić w triggerze nie mogę znaleźć chocby jednego przykładu, hmm może z tego triggera przekazać parametry do funkcji i tam zrobić upload. Może ktoś ma jakieś wskazówki? Ten post edytował Niktoś 2.06.2012, 22:40:17 |
|
|
|
Niktoś Problem z Trigger'em 26.05.2012, 21:34:04
Firebright Jeszcze nigdy nie widziałem takiej konstrukcji UPD... 27.05.2012, 07:13:35
Niktoś Witaj twoje rozwiązanie wydaje się być lepsze, jed... 27.05.2012, 23:33:31
Firebright Jasne, masz rację, niestety już od dość dawna nie ... 28.05.2012, 08:06:19 ![]() ![]() |
|
Aktualny czas: 23.12.2025 - 16:59 |