none
Update beim Insert RRS feed

  • Frage

  • Hallo Zusammen,

    ich stehe gerade auf dem Schlauch. Vielleicht komme ich auch gleich darauf und lösche diesen Beitrag, aber vielleicht könnt Ihr mal mitdenken:

    Seht ihr eine Möglichkeit schon beim Insert die [Mail] über die Matchingtabelle in den [Mailnickname] zu übersetzen und in die dbo.IDxMail zu schreiben ohne erst nach dem Insert ein Update zu machen?

    INSERT  INTO [DWDATA].[DBO].[IDxMAIL]
            ( [ID] ,
              [MAIL]
            )
            SELECT  DWDOCID ,
                    MAIL
            FROM    dwdata.dbo.PERSONAL
                    CROSS APPLY [DWDATA].[DBO].[SPLIT](REPLACE(CAST([BEMERKUNG] AS NVARCHAR(MAX)),
                                                               N'||', N','), ',')
            WHERE   [BEMERKUNG] IS NOT NULL
                    AND [DWDOCID] NOT IN ( SELECT DISTINCT
                                                    ( [ID] )
                                           FROM     [DWDATA].[DBO].[IDxMAIL]) 
       
       UPDATE   dwdata.dbo.IDxMail
       SET      MAIL = ( SELECT Mailnickname
                         FROM   dwrigths.dbo.Matchingtabelle
                         WHERE  Proxyadresse = dwdata.dbo.IDxMail.mail
                       )     
    darüber hinaus nutze ich folgende Split Function
    CREATE FUNCTION [dbo].[Split]
        (
          @String NVARCHAR(4000) ,
          @Delimiter CHAR(1)
        )
    RETURNS @Results TABLE
        (
          idx INT IDENTITY(1, 1)
                  NOT NULL ,
          Mail NVARCHAR(4000)
        )
    AS 
        BEGIN
            DECLARE @Index INT
            DECLARE @Slice NVARCHAR(4000)
            SELECT  @Index = 1
            IF @String IS NULL 
                RETURN
            WHILE @Index != 0 
                BEGIN
                    SELECT  @Index = CHARINDEX(@Delimiter, @String)
                    IF ( @Index != 0 ) 
                        SELECT  @Slice = LEFT(@String, @Index - 1)
                    ELSE 
                        SELECT  @Slice = @String
                    INSERT  INTO @Results
                            ( Mail )
                    VALUES  ( @Slice )
                    SELECT  @String = RIGHT(@String, LEN(@String) - @Index)
                    IF LEN(@String) = 0 
                        BREAK
                END
            RETURN
        END
    
    GO
    Danke für die Mithilfe im Voraus!

    Donnerstag, 6. September 2012 11:58

Antworten

  • Hallo Raul,

    ich habe mittlerweile vom Trigger Abstand genommen, da nicht sichergestellt ist, dass die Matchingtabelle zu jeden Zeitpunkt aktuell ist.

    Aus diesem Grund wird die IDxMail mehrmals täglich per Update (Agent) aktualisiert.

    Trotzdem erst einmal vielen Dank für die Mithilfe.

    Grüße

    Montag, 17. September 2012 09:31

Alle Antworten