Piotr Sięga 0 Napisano 6 Marca 2020 Udostępnij Napisano 6 Marca 2020 w Hurtowa dodanie cechy do transakcji po SQL Hej. Potrzebuję dodać hurtowo cechę do transakcji, jednak mam z tym kłopot. Pozornie wygląda to tak, że wystarczy do tabeli tr_Property dodać id transakcji i id cechy ze słownika. Jednak nie do końca rozumiem, na jakiej zasadzie nadawany jest id tej tabeli, czyli tp_Id. Dodanie go na zasadzie poprzedni id + 1 powoduje informację w Sello o problemach z integralnością w momencie kiedy chcę dodać kolejną cechę na transakcji która została wcześniej dodana po SQL. Jakieś pomysły jak podejść do tego ID? Cytuj Link to postu
Mamut Maniek 115 Napisano 6 Marca 2020 Udostępnij Napisano 6 Marca 2020 w Hurtowa dodanie cechy do transakcji po SQL Zmiany zbiorcze w Sello nie załatwią sprawy? Jeżeli chodzi o tp_Id to jest to PRIMARY KEY i jego się nie ustala podczas dodawania bo on się zwiększa sam automatycznie. Powinno to wyglądać w ten sposób: (chociaż polecenia typu INSERT na bazie Sello nie są zalecane) INSERT INTO tr_Property (tp_TransId, tp_PropId) VALUES (<id_transakcji>, <id_cechy>) Cytuj Link to postu
Piotr Sięga 0 Napisano 9 Marca 2020 Autor Udostępnij Napisano 9 Marca 2020 w Hurtowa dodanie cechy do transakcji po SQL Zbiorcze nie załatwiają sprawy, bo zmiany są na podstawie stanów z Subiekta. Zapytanie sprawdza stany, i tylko dla tych gdzie jest > 0 ma dodać cechę. Twój insert by zadziałał gdyby na kolumnie tp_Id oprócz PK był autoincrement, zapytanie wywala błąd: Cannot insert the value NULL into column 'tp_Id', table 'Sello.dbo.tr_Property'; column does not allow nulls. INSERT fails. Czyli kolumna nie zwiększa się automagicznie. Z drugiej strony Sello na jakiejś podstawie zwiększa Id, i ogólnie ta kolumna działa jakby faktycznie działała na niej autoinkrementacja. Cytuj Link to postu
Mamut Maniek 115 Napisano 9 Marca 2020 Udostępnij Napisano 9 Marca 2020 w Hurtowa dodanie cechy do transakcji po SQL 11 minut temu, Piotr Sięga napisał: Zbiorcze nie załatwiają sprawy, bo zmiany są na podstawie stanów z Subiekta. Zapytanie sprawdza stany, i tylko dla tych gdzie jest > 0 ma dodać cechę. To ma być systematycznie wykonywana operacja czy tylko jednorazowo? W Sello można wysortować aukcje po stanie z Subiekta i zaznaczyć zmiany tylko dla tych ze stanem powyżej zera. 14 minut temu, Piotr Sięga napisał: wój insert by zadziałał gdyby na kolumnie tp_Id oprócz PK był autoincrement, zapytanie wywala błąd: Trochę dziwne, że nie ma autoincrement. Można jeszcze spróbować w taki sposób (nie testowane): INSERT INTO tr_Property (tp_Id, tp_TransId, tp_PropId) VALUES ((SELECT TOP(1) tp_Id + 1 from tr_Property), <id_transakcji>, <id_cechy>) Cytuj Link to postu
Piotr Sięga 0 Napisano 9 Marca 2020 Autor Udostępnij Napisano 9 Marca 2020 w Hurtowa dodanie cechy do transakcji po SQL Cytat To ma być systematycznie wykonywana operacja czy tylko jednorazowo? W Sello można wysortować aukcje po stanie z Subiekta i zaznaczyć zmiany tylko dla tych ze stanem powyżej zera. Systematycznie wykonywane. Cytat Trochę dziwne, że nie ma autoincrement. Można jeszcze spróbować w taki sposób (nie testowane): Już przerobione, tak jak wcześniej pisałem, właśnie w tej sytuacji Sello wywala problemy z integralnością. Co ciekawe, nadanie cechy przez Sello ustawia Id np.na 11261, usunięcie cechy usuwa również to Id, więc ostatnie używane to 11260, ale przypisanie kolejnej cechy przez Sello ustawia Id nie na ostatnie w tabeli + 1 czyli znów na 11261, ale na 11262, czyli dokładnie tak jakby na kolumnie było AI. Cytuj Link to postu
Bartosz Rosa 1 784 Napisano 9 Marca 2020 Udostępnij Napisano 9 Marca 2020 w Hurtowa dodanie cechy do transakcji po SQL identyfikatory dla tabel należy nadawać za pomocą procedury składowanej spIdentyfikator. Poniżej przykładowy kod jak uzyskać @id dla nowego wiersza. declare @id int exec spIdentyfikator 'tr_property', 1, @id output select @id Dzięki temu nie będzie problemów ze spójnością danych. Jeśli potrzeba więcej identyfikatorów to zamiast 1 można wpisać większą liczbę. 14 minut temu, Piotr Sięga napisał: czyli dokładnie tak jakby na kolumnie było AI. Bo jest, tylko "softwareowe" o nazwie tabeli ins_Ident. 1 Cytuj Link to postu
Mamut Maniek 115 Napisano 7 Lutego 2023 Udostępnij Napisano 7 Lutego 2023 w Hurtowa dodanie cechy do transakcji po SQL (edytowane) Wracając do tematu stworzyłem przykładowe zapytanie SQL, które dodaje do danej transakcji odpowiednią cechę DECLARE @trans_id INT = 3529752 -- identyfikator transakcji IF EXISTS ( SELECT 1 FROM tr__Transaction WHERE tr_Id = @trans_id ) -- jeżeli taka transakcja istnieje to... BEGIN DECLARE @prop_id INT = (SELECT tp_Id FROM sl_TransProperty WHERE tp_Name = 'ObrobionaBL') -- sprawdzamy identyfikator cechy wg jej nazy IF EXISTS (SELECT @prop_id) -- jeżeli taka cecha istnieje to.. BEGIN IF NOT EXISTS ( SELECT tp_Id FROM tr_Property WHERE tp_TransId = @trans_id AND tp_PropId = @prop_id ) -- upewniamy się, że ta transakcja nie ma już nadanej takiej cechy.. BEGIN DECLARE @last_tpid INT EXEC spIdentyfikator 'tr_Property',1,@last_tpid OUTPUT -- wczytujemy wolny identyfikator tabeli tr_Property i dopisujemy go do liczników w tabeli ins_Ident INSERT INTO "tr_Property" ("tp_Id","tp_TransId","tp_PropId") VALUES (@last_tpid,@trans_id,@prop_id) -- dodajemy cechę do transakcji END END END Edytowane 7 Lutego 2023 przez Mamut Maniek Cytuj Link to postu
Mamut Maniek 115 Napisano 24 Maja 2023 Udostępnij Napisano 24 Maja 2023 w Hurtowa dodanie cechy do transakcji po SQL W dniu 9.03.2020 o 10:05, Bartosz Rosa napisał: identyfikatory dla tabel należy nadawać za pomocą procedury składowanej spIdentyfikator. Poniżej przykładowy kod jak uzyskać @id dla nowego wiersza. declare @id int exec spIdentyfikator 'tr_property', 1, @id output select @id Dzięki temu nie będzie problemów ze spójnością danych. Jeśli potrzeba więcej identyfikatorów to zamiast 1 można wpisać większą liczbę. Bo jest, tylko "softwareowe" o nazwie tabeli ins_Ident. o co chodzi z parametrem @liczba w procedurze składowanej spIdentyfikator? Próbowałem podać tam inną wartość niż 1 (np. 3) ale zmienna @id jest typu int i tam trzyma tylko jedną wartość, o co chodzi? Cytuj Link to postu
Bartosz Rosa 1 784 Napisano 24 Maja 2023 Udostępnij Napisano 24 Maja 2023 w Hurtowa dodanie cechy do transakcji po SQL Jest to liczba identyfikatorów do rezerwacji, np jeśli potrzebujesz 17 identyfikatorów, bo wiesz że tyle obiektów będziesz do bazy danych dodawał, to można wywołać spIdentyfikator raz podając 17 jako liczba. Licznik identyfikatorów zostanie przesunięty o 17 do przodu. Czyli mówiąc pseudokodem, zamiast: for(i = 0 to 16) { id = spIdentyfikator('nazwa',1) obiekt.id = id ... } robisz id = spIdentyfikator('nazwa',17) for(i = 0 to 16) { obiekt.id = id+i ... } 1 Cytuj Link to postu
Mamut Maniek 115 Napisano 25 Maja 2023 Udostępnij Napisano 25 Maja 2023 w Hurtowa dodanie cechy do transakcji po SQL Po co korzystać z takiej funkcji nadającej identyfikatory skoro można w tabeli ustawić auto-increment ? Przepraszam, że pytam ale jestem ciekawy. Cytuj Link to postu
Bartosz Rosa 1 784 Napisano 25 Maja 2023 Udostępnij Napisano 25 Maja 2023 w Hurtowa dodanie cechy do transakcji po SQL Spodziewałem się tego pytania , ale trzeba by było zapytać pradawnych twórców platformy GT. Nie wiem jednak czy pamiętają . Możliwe, że chodziło o to aby identyfikatory obiektów podrzędnych były znane przed zapisem danych do bazy - ale to tylko moje przypuszczenia. 1 Cytuj Link to postu
Polecane posty
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.