[MSSQL] Działanie Trigera

0

Witam!
Mam banalną tabelę (zupełnie bez sensu tylko dla celów edukacyjnych), z kolumnami A1, B1, Wynik, IDDzialania. Chce uzyskać taki efekt, że A1 będzie dodane do A2 a wynik wstawiony do kolumny wynik.
Udaje się to, kiedy utworze odpowiednią formułę we właściwosciach kolumny wynik i wszystko działa ok, bez problemu samo sie sumuje.
Problem pojawia się gdy chcę to samo zrobic za pomocą triggera. Sam triger działa, ale dopiero kiedy nacisnę ExecuteSQL. Czemu nie działa automatycznie, jakby w tle? I da się to jakoś osiągnąć? (Pisze aplikacje w VB i załączony do bazy w programie trigger po prostu nie działa dlatego pytam bo nie wiem jak sobie z tym poradzić, a w tabeli w moim programie nie wystarczy wpisac wyrażenie we właściwościach, lepszy byłby trigger).

0

Hallo stawiu!

Jaki trigger zastosowales? O ile sie nie myle, to w MSSQL istnieja dwa: "AFTER" i INSTEAD OF".
Przy jakich zdarzeniach bedzie aktywowany?

Moglbys przedstawic kod twojego triggera?

Pozdrowiam
Markus

0
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[Dodaj]
   ON  [dbo].[Dzialania]
   AFTER INSERT,UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
DECLARE @a int
DECLARE @b int
SELECT @a = (select A from inserted)
SELECT @b = (select B from inserted)
UPDATE Dzialania SET Suma = A+B WHERE IDDzialania IN (SELECT IDDizalania FROM inserted)

END

Tak wygląda ten trigger. Ale jak już mówiłem sam trigger działa, ale dopiero po nacisnięciu "ExecuteSQL", chciałbym żeby działał automatycznie po każdym dodaniu lub zaktualizowaniu wiersza, podobnie jak wtedy,gdy wpisuję własciwość Expression komórki Suma na 'A + B'.

0

Hallo stawiu!

trwalo troszke, bo musialem zainstalowac SQL Server i troche sie z nim zapoznac (nigdy dotad z nim nie pracowalem). Twoj trigger troszke poprawilem i uproscilem poniewaz twoja wesja wpisywala w pole "wynik" we wszystkich wierszach ostatnia wyliczona wartosc.

Czli jak bylo:
a1 a2 wynik
1 2 3
2 3 5
3 4 7
4 5 9

to po zmianie w 3 wierszu a2 z 4 na 1 tabela przedstawiala sie nastepujaco:
a1 a2 wynik
1 2 4
2 3 4
3 1 4
4 5 4

Moja propozycja (na pewno jeszcze nie doskonala):

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER TRIGGER [dbo].[dodaj] 
          ON  [dbo].[tabelle01] 
        AFTER INSERT, UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for trigger here

	UPDATE tabelle01 SET wynik = a1 + a2     
END

Po zmianie w 3 wierszu a2 z 4 na 1 tabela przedstawiala sie nastepujaco:
a1 a2 wynik
1 2 3
2 3 5
3 1 4
4 5 9

Poza tym:

  1. nie bardzo rozmiem do czego ma sluzyc klauzula "WHERE".
    UPDATE Dzialania SET Suma = A+B WHERE IDDzialania IN (SELECT IDDizalania FROM inserted)
  2. jezeli jest ona konieczna konieczna, to chyba powinno byc (SELECT IDDzialania FROM inserted) a nie (SELECT IDDizalania FROM inserted)

Pozdrawiam
Markus

1 użytkowników online, w tym zalogowanych: 0, gości: 1