Hallo Ivo,

da gibt es ein Flag das man setzen kann um die Transaktion um mehrere Batchbl�cke zu 
legen.

SET XACT_ABORT ON

BEGIN TRANSACTION

        ..... Code

COMMIT TRANSACTION

dann wird alles in einen Rollback eingeschlossen, was nach dem Begin kommt. (SQL 
Server 2000)

Andreas

> -----Urspr�ngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Auftrag von Ivo Looser
> Gesendet: Dienstag, 11. Mai 2004 10:28
> An: [EMAIL PROTECTED]
> Betreff: [Coffeehouse] Transaction im SQL Server
> 
> 
> Hallo Zusammen
> 
> Im beigef�gten Script m�chte ich aus einer Tabelle doppelte eintr�ge
> entfernen. Daf�r gehe ich folgendermassen vor:
> 
>       - Tempor�re Tabelle mit gleicher struktur wie die orginale
>       - insert into group by orginaltabelle
>       - delete orginaltabelle 
>       - insert into orginaltabelle from temptabelle
> 
> 
> Funktioniert soweit so gut. Nu m�chte ich aber nicht das im 
> fall bei einem
> fehler alle meine Daten aus der Orginal tabelle weg sind. Ich 
> habe versucht
> eine Transaction um die die prozedure zu h�ngen. 
> Jedoch wird auch bei einem fehler kein rollback durchgef�hrt.
> 
> 
> Habt ihr eine Idee wieso das so ist? Gibt es eventuell eine 
> m�glichkeit das
> in einem einzigen SQL zu l�sen?
> 
> P.s. es wird absichtlich ein fehler durch die sp generiert. 
> 
> 
> Danke f�r eure hilfe. Viele Gr�sse Ivo
> 
> create table t1(col1 int, col2 int, col3 char(50))
> insert into t1 values (1, 1, 'data value one')
> insert into t1 values (1, 1, 'data value one')
> insert into t1 values (1, 2, 'data value two')
> insert into t1 values (1, 2, 'data value two')
> insert into t1 values (1, 2, 'data value two')
> insert into t1 values (2, 3, 'data value tree')
> insert into t1 values (2, 3, 'data value tree')
> insert into t1 values (3, 4, 'data value four')
> go
> 
> 
>       
>       IF EXISTS (SELECT name 
>                  FROM   sysobjects 
>                  WHERE  name = N'RemoveDublicateFromT1' 
>                  AND    type = 'P')
>           DROP PROCEDURE RemoveDublicateFromT1
>       GO
>       
>       CREATE PROCEDURE RemoveDublicateFromT1
>       AS
>       
>       Begin Transaction Cleanup
>               create table #t1(col1 int, col2 int, col3 char(2))
>       
>               insert into #t1
>               SELECT col1, col2, col3
>               FROM t1
>               GROUP BY col1, col2, col3
>       
>       
>               delete from t1
>       
>               insert into t1 Select * from #t1
>       
>               select count(*) from #t1
>       
>               select count(*) from t1
>       
>       if @@error != 0 
>       begin
>       
>               rollback Transaction Cleanup
>               return
>               
>       
>       end
>       
>       Commit Transaction Cleanup
>       
>       GO
>       
>       -- =============================================
>       -- example to execute the store procedure
>       -- =============================================
>       EXECUTE RemoveDublicateFromT1
>       GO
> 
> 
> drop table t1
> 
> 
> 
> _______________________________________________
> Coffeehouse Mailingliste, Postings senden an:
> [EMAIL PROTECTED]
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/coffeehouse
> 
_______________________________________________
Coffeehouse Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/coffeehouse

Antwort per Email an