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)

> -----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

Antwort per Email an