Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


hjälp med trigger...

Postades av 2001-06-05 12:23:00 - Peter Bladh, i forum sql-server/msde, Tråden har 2 Kommentarer och lästs av 1187 personer

Hej

Jag har två tabeller; MainTable och SecTable. När det görs en insert i SecTable räknas ett värde ner i MainTable. Likaså räknas värdet upp när det görs en delete i SecTable. När det ned värdet räknats ner till noll vill jag omöjliggöra en insert eller rättare sagt vill jag skicka ett felmeddelnade. Så långt är allt okej, men grejen är att det görs ju ändå en insert i SecTable, trots att nedräkningen inte utförs. Jag inser möjligheten att göra en delete på det nya värdet, men då triggas min delete-trigger och då ökas värdet i min mainTable. Det blir alltså också fel.
Vad kan man göra? Kan man göra en rollback på inserten som skedde innan triggern utförs? (jag har ingen sp till detta utan det sker via ado)

Så här ser triggern ut nu:

CREATE TRIGGER SecTableInsert ON [dbo].[SecTable]
FOR INSERT
AS
DECLARE
@antalRader int,
@fel varchar(255),
@felNummer int,
@lediga int,
@secID int
BEGIN
SELECT @antalRader = @@rowcount
SELECT @lediga = MainTable.Lediga FROM MainTable

IF @lediga < @antalRader BEGIN
SELECT @felNummer = 13000
SELECT @fel = 'Error! Licenserna är slut.'
raiserror @felNummer @fel
END
ELSE
BEGIN
UPDATE MainTable SET Lediga = Lediga-@antalRader
FROM inserted, MainTable
WHERE MainTable.MainID = inserted.MainID
END
RETURN
errorHandler:
RAISERROR @felNummer @fel
END


Tack på förhand!
/Peter


Svara

Sv: hjälp med trigger...

Postades av 2001-06-05 18:31:00 - Christoffer Hedgate

Använd funktionen TRIGGER_NESTLEVEL() för att se om triggern har triggats av den första triggern (mycket triggers där...) Ett litet snabbhackat exempel som nog kommer att förklara ganska tydligt:


create table foobar (a int, b int)
go

create table barfoo (allowed int)
go

insert into barfoo values (5)
go

CREATE TRIGGER foobar_insert
ON foobar
FOR INSERT
AS
BEGIN
DECLARE @num int, @allowed int
SELECT @num = @@rowcount
SELECT @allowed = allowed FROM barfoo

IF @allowed < @num
BEGIN
DELETE foobar
FROM inserted
WHERE foobar.a = inserted.a
END
ELSE
BEGIN
UPDATE barfoo SET allowed = allowed-@num
END
END
GO

CREATE TRIGGER foobar_delete
ON foobar
FOR DELETE
AS
BEGIN
DECLARE @nestlevel int, @num int
SELECT @nestlevel = TRIGGER_NESTLEVEL()
SELECT @num = @@rowcount

IF @nestlevel > 1
BEGIN
PRINT 'Kilroy was here...'
END
ELSE
BEGIN
UPDATE barfoo SET allowed = allowed+@num
END
END
GO


/* Ta bort kommentarerna för att testa triggrarna med nedanstående kod
select * from foobar
select * from barfoo

insert into foobar values (1,1)
insert into foobar values (2,1)
insert into foobar values (3,1)
insert into foobar values (4,1)
insert into foobar values (5,1)

select * from foobar
select * from barfoo

insert into foobar values (6,1)

select * from foobar
select * from barfoo

delete from foobar where a = 1

select * from foobar
select * from barfoo
*/


Svara

Sv: hjälp med trigger...

Postades av 2001-06-06 10:58:00 - Peter Bladh

Konon! Tack så mycket!

/Peter


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 736
27 958
271 751
1 209
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies
Expand
next previous
Close

Previous

0/0

Next