Autor Wątek: Pomoc w modyfikacji triggera przenoszącego dane do pola własnego  (Przeczytany 2704 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline cptbombax

  • Użytkownik
  • **
  • Wiadomości: 86
  • Reputacja +2/-0
  • Wersja programu: GT
Cześć,

mam pole własne które chciałbym wykorzystać jako kolumnę w module Towary (jest taka opcja).
Chciałbym mieć na liście wagę netto towarów aby widzieć gdzie dokładnie jej brakuje i móc sobie od razu to poprawiać.
Zrobiłem rozszerzone pole własne z typem Kwota (bo pasuje formatem do tw_MasaNetto w sam raz).

Zmodyfikowałem trochę triggera z tego tematu

http://forumsubiekta.pl/dodatki-zestawienia/subiekt-zapytanie-wlasne-sql-do-pola-wlasnego-w-towary/msg63851/#msg63851


USE [server_nowa_back]
GO
/****** Object:  Trigger [dbo].[update]    Script Date: 2023-09-05 14:30:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[update] ON [dbo].[tw__Towar]  --za pierwszym razem CREATE TRIGGER
FOR update --dla dodanych towarów
AS
begin
UPDATE pw_dane --aktualizuj tabelę pól rozszerzonych
SET
   pwd_Kwota01 = tw.tw_MasaNetto

FROM tw__Towar as tw
   INNER JOIN pw_Dane ON pwd_IdObiektu=tw.tw_Id and pwd_TypObiektu=-14   
        inner join inserted as twci on tw.tw_Id=twci.tw_Id --zapis tylko do rekordów zmienionych
end

i mimo ~65k produktów (~35k aktywne) tylko na jakichś ~18700 dane się przeniosły (wagę ma uzupełnione ~25k) .
Trigger tylko włączany na chwilę aby puścić na bazie jakiś byle jaki update na wszystkie towary i aby się uruchomił, potem go wyłączam.
Jak to zmodyfikować aby każdy produkt który ma wypełnione tw_MasaNetto miał te dane przeniesione do pwd_Kwota01?

Czy lepiej w ogóle zrobić jakieś pojedyncze zapytanie, ale co mam wtedy dodać do bazy, jaki to ma być insert aby automatycznie dodał wszystko.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Pomoc w modyfikacji triggera przenoszącego dane do pola własnego
« Odpowiedź #1 dnia: Wrzesień 05, 2023, 15:40:05 »
i mimo ~65k produktów (~35k aktywne) tylko na jakichś ~18700 dane się przeniosły (wagę ma uzupełnione ~25k) .
Trigger tylko włączany na chwilę aby puścić na bazie jakiś byle jaki update na wszystkie towary i aby się uruchomił, potem go wyłączam.
Jak to zmodyfikować aby każdy produkt który ma wypełnione tw_MasaNetto miał te dane przeniesione do pwd_Kwota01?

Zacząłbym od dodawania pól własnych, musi istnieć, aby móc je zaktualizować.

Czy lepiej w ogóle zrobić jakieś pojedyncze zapytanie, ale co mam wtedy dodać do bazy, jaki to ma być insert aby automatycznie dodał wszystko.

Rozwiązania do potrzeb, w tym przypadku powinno wystarczyć. Nie będzie to goły insert, będzie potrzebna pętla i trochę więcej poleceń.
« Ostatnia zmiana: Wrzesień 06, 2023, 08:27:35 wysłana przez dkozlowski »
Daniel, Białystok.

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Odp: Pomoc w modyfikacji triggera przenoszącego dane do pola własnego
« Odpowiedź #2 dnia: Wrzesień 05, 2023, 16:08:58 »
Zmodyfikowałem trochę triggera z tego tematu
(...)
Trigger tylko włączany na chwilę aby puścić na bazie jakiś byle jaki update na wszystkie towary i aby się uruchomił, potem go wyłączam.
Serio tworzysz trigger, który włączaszn na chwilę i uruchamiasz poleceniem SQL, które aktualizuje wszystkie towary?  :o
Przecież bez sensu.
Zamiast kombinowąć z triggerem, który jest znacznie trudniejszy do bezbłędnego napisania, należy to zrobić normalnie w T-SQL i po prostu uruchamiać co jakiś czas, ręcznie albo z harmonogramu zadań.
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline cptbombax

  • Użytkownik
  • **
  • Wiadomości: 86
  • Reputacja +2/-0
  • Wersja programu: GT
Odp: Pomoc w modyfikacji triggera przenoszącego dane do pola własnego
« Odpowiedź #3 dnia: Wrzesień 06, 2023, 12:25:41 »
Serio tworzysz trigger, który włączaszn na chwilę i uruchamiasz poleceniem SQL, które aktualizuje wszystkie towary?  :o
Przecież bez sensu.
Zamiast kombinowąć z triggerem, który jest znacznie trudniejszy do bezbłędnego napisania, należy to zrobić normalnie w T-SQL i po prostu uruchamiać co jakiś czas, ręcznie albo z harmonogramu zadań.

To mój punkt startowy, że tak powiem.

Na ten moment trochę utknąłem przy dodawaniu tych pól własnych, teoretycznie coś tam się dodaje, ale może macie jakąś prostszą kwerendę na to

tu moja

DECLARE @StartingPwdId INT;

-- Find the maximum pwd_Id in pw_Dane and set it as the starting point
SELECT @StartingPwdId = ISNULL(MAX(pwd_Id), 0) FROM pw_Dane;

-- Increment the starting pwd_Id by 1 to ensure uniqueness
SET @StartingPwdId = @StartingPwdId + 1;

-- Create a temporary table to store distinct pwd_IdObiektu values
CREATE TABLE #DistinctPwdIdObiektu (pwd_IdObiektu INT);

-- Insert distinct pwd_IdObiektu values into the temporary table
INSERT INTO #DistinctPwdIdObiektu (pwd_IdObiektu)
SELECT DISTINCT tw.tw_Id
FROM tw__Towar tw
WHERE tw.tw_MasaNetto IS NOT NULL
  AND tw.tw_MasaNetto != '0,00'
  AND tw.tw_MasaNetto != '0,000';

-- Insert data into pw_Dane with the adjusted starting pwd_Id, skipping existing pwd_IdObiektu duplicates
INSERT INTO pw_Dane (pwd_Id, pwd_TypObiektu, pwd_IdObiektu, pwd_Kwota01)
SELECT
  @StartingPwdId + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS pwd_Id,
  -14 AS pwd_TypObiektu,
  dpio.pwd_IdObiektu,
  tw.tw_MasaNetto AS pwd_Kwota01
FROM #DistinctPwdIdObiektu dpio
JOIN tw__Towar tw ON dpio.pwd_IdObiektu = tw.tw_Id
LEFT JOIN pw_Dane pd ON dpio.pwd_IdObiektu = pd.pwd_IdObiektu
WHERE pd.pwd_IdObiektu IS NULL; -- Check if pwd_IdObiektu doesn't exist already in pw_Dane

-- Drop the temporary table
DROP TABLE #DistinctPwdIdObiektu;

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1250
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Pomoc w modyfikacji triggera przenoszącego dane do pola własnego
« Odpowiedź #4 dnia: Wrzesień 06, 2023, 12:40:54 »
Koniecznie zapoznaj się z tabelą ins_ident i procedurą spIdentyfikator bo inaczej będziesz miał bardzo dziwne problemy.

Offline cptbombax

  • Użytkownik
  • **
  • Wiadomości: 86
  • Reputacja +2/-0
  • Wersja programu: GT
Odp: Pomoc w modyfikacji triggera przenoszącego dane do pola własnego
« Odpowiedź #5 dnia: Wrzesień 06, 2023, 12:52:50 »
Sprawdzę, dzięki.

Forum Użytkownikow Subiekt GT

Odp: Pomoc w modyfikacji triggera przenoszącego dane do pola własnego
« Odpowiedź #5 dnia: Wrzesień 06, 2023, 12:52:50 »