-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hallo,

> -----Urspr�ngliche Nachricht-----
> Von: Andreas Roth [mailto:[EMAIL PROTECTED]
> Gesendet: Dienstag, 11. Mai 2004 11:56
> An: [EMAIL PROTECTED]
> Betreff: AW: [Database.asp] Triggerproblem in SQL-2000
> 
> 
> Zu Problem 1:
> 
> Schreibe die varchars, die zu lange sein k�nnen in eine 
> tempor�re Tabelle
> aus der du dann die zu langen l�scht (SET StringFeld = NULL WHERE
> LEN(StringFeld)>100
> 
> Und Joine diese Tabelle
> 
> Zu Problem 2:
> 
> Eine Fortlaufende Nummer innerhalb einer Update Anweisung 
> bekommst du mit
> IDENTITY(@Startwert, @Schrittweite)

Hmm, hast Du da noch ein bischen mehr Nachhilfe? Bin vielleicht doch
noch zu sehr Access-gesch�digter SQL-2000 Newbie...


> > -----Urspr�ngliche Nachricht-----
> > Von: [EMAIL PROTECTED] 
> > [mailto:[EMAIL PROTECTED] Im Auftrag von 
> > L�tje Dieter (KKK TKEK)
> > Gesendet: Dienstag, 11. Mai 2004 09:07
> > An: '[EMAIL PROTECTED]'
> > Betreff: [Database.asp] Triggerproblem in SQL-2000
> > 
> >  
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> > 
> > Hallo,
> > 
> > ich versuch mich gerade daran ein kombinierten Trigger im
> > SQL-Server zu erstellen. Vom Prinzip her ist das ja auch erstmal
> > kein Problem, aber - die beiden folgenden Situationen kriege ich
> > noch nicht hin. Gegeben sind die beiden folgenden Tabellen,
> > 
> > tblA
> > lng_AId     str_AFeld1      str_AFeld2      str_AFeld3
> > 1           x1              x2              x3
> > 112         b1              b2              b3
> > 113         c1              c2              c3
> > 
> > tblAA
> > lng_AAid    lnk_AId str_AAFeld
> > 1           1               x
> > 2           1               y
> > 3           1               z
> > 3           112             x
> > 4           112             y
> > 5           112             z
> > 6           113             x
> > 7           113             y
> > 8           113             z
> > 
> > sowie der weiter unten aufgelistete Trigger.
> > 
> > Mein erstes Problem entsteht durch die folgende Anweisung:
> > 
> > UPDATE tblA
> > SET    str_AFeld1='a1', str_AFeld2='a2', str_AFeld3='a3'
> > WHERE  lng_AId = 1
> > 
> > Solange die Zuweisungen in allen Feldern funktionieren, 
> klappt das ja
> > auch. Was aber, wenn der String z.B. f�r str_AFeld2 zu gro� 
> ist? Dann
> > l�uft der Trigger in das Rollback und nimmt auch die 
> �nderung f�r das
> > Feld str_AFeld1 wieder zur�ck. Kann man das irgendwie so 
> zaubern, das
> > dann die �nderung f�r str_AFeld1 beibehalten wird, f�r's zweite
> > Feld nicht ausgef�hrt, und das 3. Feld auch noch richtig
> > behandelt wird?  
> > 
> > 
> > Mein n�chstes Problem beruht auf der Forderung "sch�ne"
> > fortlaufende Nummern haben zu m�ssen (nicht zu wollen! Ich weis
> > dass das Quatsch ist, aber erz�hl das mal einem Chef). Also, die
> > Anweisung
> > 
> > UPDATE tblA
> > SET    lng_AId = 2
> > WHERE  lng_AId = 112
> > 
> > funktioniert ja tadellos. Wenn ich aber mittels der Anweisung
> > 
> > UPDATE tblA
> > SET    lng_AId = lng_AId - 100
> > WHERE  lng_AId > 100
> > 
> > gleich mehrere Zeilen updaten will, leg' ich mir die Karten, wie
> > ich das dem Trigger (im Code bei "???") beibringen soll. Hat da
> > mal irgendjemand einen Denkanstoss f�r mich?
> > 
> > 
> > CREATE TRIGGER [TR_tblA] ON [dbo].[tblA]
> > FOR INSERT, UPDATE, DELETE
> > AS
> > 
> > - -- *********************************************************
> > - -- *** Deklaration der Variablen ***************************
> > - -- *********************************************************
> > 
> >    DECLARE @lngDeletedRecords  AS Integer
> >    DECLARE @lngInsertedRecords AS Integer
> >    DECLARE @lngError           AS Integer
> > 
> > 
> > - -- *********************************************************
> > - -- * Transact-SQL Anzahlmeldungen ausschalten.
> > - -- *********************************************************
> > 
> >    SET NOCOUNT ON
> > 
> > 
> > - -- *********************************************************
> > - -- * Anzahl  der  gel�schten  und  der  eingef�gten  Records
> > - -- * ermitteln.
> > - -- *********************************************************
> > 
> >    SELECT @lngDeletedRecords = (SELECT COUNT(*) FROM deleted)
> >    SELECT @lngInsertedRecords = (SELECT COUNT(*) FROM inserted)
> > 
> > 
> > - -- *********************************************************
> > - -- * Wenn  in der Tabelle deleted wenigstens ein, und in der
> > - -- * Tabelle inserted gar kein Record �bermittelt wurden,
> > - -- *********************************************************
> > 
> >    IF @lngDeletedRecords  > 0 AND
> >       @lngInsertedRecords = 0     BEGIN
> > 
> >       -- ***************************************************
> >       -- * wurde  der  Delete-Trigger  ausgel�st.  In diesem
> >       -- * Fall  l�schen  wir  einfach alle �ber die Tabelle
> >       -- * deleted  zum  L�schen   ausgew�hlten  Datens�tze.
> >       -- * Falls  es dabei zu einem Fehler kommt, gibt's f�r
> >       -- * die ganze Transaktion halt ein Rollback.
> >       -- ***************************************************
> > 
> >          DELETE tblA FROM tblA, deleted
> >          WHERE  tblA.lng_AId = deleted.lng_AId
> >          SET @lngError = @@Error
> >          IF @lngError <> 0 BEGIN
> >             ROLLBACK
> >          END
> > 
> > 
> >       END
> > 
> >    ELSE BEGIN
> > 
> >       -- ***************************************************
> >       -- * Wenn in der  Tabelle deleted gar kein Record, und
> >       -- * in  der  Tabelle  inserted  wenigstens ein Record
> >       -- * �bermittelt wurden,
> >       -- ***************************************************
> > 
> >          IF @lngDeletedRecords  = 0 AND
> >             @lngInsertedRecords > 0     BEGIN
> > 
> >             -- *********************************************
> >             -- * wurde der Insert-Trigger ausgel�st, den wir
> >             -- * hier aber noch gar nicht brauchen.
> >             -- *********************************************
> > 
> >                Print CAST(@lngInsertedRecords AS Varchar) +
> >                      " Record(s) wurden eingef�gt"
> > 
> > 
> >             END
> > 
> >          ELSE BEGIN
> > 
> >             -- *********************************************
> >             -- * sonst  wurde  der Update-Trigger ausgel�st.
> >             -- * Wenn  es  sich  in diesem Fall nur um einen
> >             -- * ver�nderten Datensatz handelt,
> >             -- *********************************************
> > 
> >                IF @lngDeletedRecords = 1 BEGIN
> > 
> >                   -- ***************************************
> >                   -- * f�hren  wir  halt  die entsprechenden
> >                   -- * �nderungen  in dem oder den Feld bzw.
> >                   -- * Feldern durch.
> >                   -- ***************************************
> > 
> >                      IF UPDATE(lng_AId) BEGIN
> >                         UPDATE tblAA
> >                         SET    lnk_AId = (SELECT lng_AId FROM
> > inserted)
> >                         WHERE  lnk_AId = (SELECT lng_AId FROM
> > deleted)
> >                         SET @lngError = @@Error
> >                         IF @lngError <> 0 BEGIN
> >                            ROLLBACK
> >                         END
> >                      END
> > 
> >                      IF UPDATE(str_AFeld1) BEGIN
> >                         -- *** Hier �nderungen f�r Feld1
> >                         SET @lngError = @@Error
> >                         IF @lngError <> 0 BEGIN
> >                            ROLLBACK
> >                         END
> >                      END
> > 
> >                      IF UPDATE(str_AFeld2) BEGIN
> >                         -- *** Hier �nderungen f�r Feld2
> >                         SET @lngError = @@Error
> >                         IF @lngError <> 0 BEGIN
> >                            ROLLBACK
> >                         END
> >                      END
> > 
> >                      IF UPDATE(str_AFeld1) BEGIN
> >                         -- *** Hier �nderungen f�r Feld3
> >                         SET @lngError = @@Error
> >                         IF @lngError <> 0 BEGIN
> >                            ROLLBACK
> >                         END
> >                      END
> > 
> >                   END
> > 
> >                ELSE BEGIN
> > 
> >                   -- ***************************************
> >                   -- * ???
> >                   -- ***************************************
> > 
> >                      Print "Mehrere Updatezeilen werden noch
> > nicht unterst�tzt..."
> >                      Rollback
> > 
> >                END
> > 
> >          END
> > 
> >    END
> > 
> > 
> > - -- *********************************************************
> > - -- * Transact-SQL Anzahlmeldungen einschalten.
> > - -- *********************************************************
> > 
> >    SET NOCOUNT OFF
> > 
> > 
> > 
> > 
> > 
> > 
> > mfG - D. L�tje
> > 
> > - ---
> > 
> >                  \\|||//                   //|||\\
> >                  |     |                   (�   �)
> >                  (.) (.)                      "
> > ==============oOO==(_)==OOo=============��O===�==O��==============
> >  
> > 
> > Dieter L�tje, Kernkraftwerk Kr�mmel, Elbuferstr. 82, D-21502
> > Geesthacht.
> > Tel.: +49 (0)4152 - 15 23 25, Fax: +49 (0)4152 - 15 23 39.
> > eMail: [EMAIL PROTECTED]
> > 
> > PGP-Key at: idap://certserver.pgp.com or
> > PGP-Fingerprint: C52A 5AEC 91B1 7F84 3BCA F406 43AE 8845 27CC
> > 09BA  
> > 
> > -----BEGIN PGP SIGNATURE-----
> > Version: PGPfreeware 7.0.3 for non-commercial use 
<http://www.pgp.com>
> 
> iQA/AwUBQKCKp0OuiEUnzAm6EQKrFgCfXQpX0brTEW7NhtTENQ+/7B9st88Aniyq
> QQhW4bC/VhYefGJXqY/0eKQp
> =s8vJ
> -----END PGP SIGNATURE-----
> _______________________________________________
> Database.asp Mailingliste, Postings senden an:
> [EMAIL PROTECTED]
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/database.asp

_______________________________________________
Database.asp Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/database.asp

mfG - D. L�tje

- ---

                 \\|||//                   //|||\\
                 |     |                   (�   �)
                 (.) (.)                      "
==============oOO==(_)==OOo=============��O===�==O��==============

Dieter L�tje, Kernkraftwerk Kr�mmel, Elbuferstr. 82, D-21502
Geesthacht.
Tel.: +49 (0)4152 - 15 23 25, Fax: +49 (0)4152 - 15 23 39.
eMail: [EMAIL PROTECTED]

PGP-Key at: idap://certserver.pgp.com or
PGP-Fingerprint: C52A 5AEC 91B1 7F84 3BCA F406 43AE 8845 27CC 09BA

-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 7.0.3 for non-commercial use <http://www.pgp.com>

iQA/AwUBQKCuKkOuiEUnzAm6EQKCWACfSVGtdhIIT/rmD6sOBYJS5N1pYp4AniUu
E7T6veW3wkR9s89lx9gml7Rt
=um7m
-----END PGP SIGNATURE-----
_______________________________________________
Database.asp Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/database.asp

Antwort per Email an