2016-04-24 14 views
0

Ich bin neu hier wieder. Ich sage es noch einmal, weil mein erstes Intro zu SQL 1992 auf einem AS400 war.IF EXISTS INSERT ELSE UPDATE Vermeidung von Dubletten mit 3 Tabellen

Ich weiß, dass es ein paar ähnliche Beiträge gab. Ich habe versucht, Ideen von jedem zu bekommen, um mein Problem zu lösen, aber wenig bis keinen Erfolg. Hier ist, was ich versuche zu tun. Es gibt 3 Tische. Zwei Quellentabellen und eine Zieltabelle. Quelltabellen sind Tickets und TicketEntities und die Zieltabelle ist DelTimes.

Tickets hat Spalten:

(Id (primary), TicketNumber, LastUpdateTime and LastOrderDate, DepartmentId) 

TicketEntities hat Spalten:

(Ticket_Id, EntityTypeId, EntityName) 

Zieltabelle DelTimes hat:

(TicketId, TicketNo, TicketDate, LOTime, LOMinutes, DriverNam) 

Die lastOrderDate und LastUpdateTime sind Datum und Uhrzeit Combin ed, dass ich Informationen aus der Verwendung von Convert extrahieren muss.

Hier ist, was ich bisher mit Fehler mehrteilige Kennung Probleme habe.

IF EXISTS (SELECT * FROM Tickets, TicketEntities Where Tickets.DepartmentId = 2 and EntityTypeId = 3) 
    UPDATE DelTimes 
      SET TicketId =Tickets.Id, 
       DelTimes.TicketNo = Tickets.TicketNumber, 
       DelTimes.TicketDate = CONVERT(Date,Tickets.LastOrderDate,5), 
       DelTimes.LOTime = Convert(datetime,Tickets.LastOrderDate,8), 
       DelTimes.LOMinutes = DATEDIFF(minute,Tickets.LastOrderDate,Tickets.LastUpdateTime), 
       DelTimes.DriverNam = TicketEntities.EntityName 
ELSE 
    INSERT INTO DelTimes (TicketId, TicketNo, TicketDate, LOTime, LOMinutes, DriverNam) 
         VALUES (Id, TicketNumber, CONVERT(Date,LastOrderDate,5), 
         Convert(datetime,LastOrderDate,8), 
         DATEDIFF(minute,LastOrderDate,LastUpdateTime), 
             EntityName) 

Ihre Hilfe bei der Lösung dieses Problems wird geschätzt!

+0

Formatcode. Mehr Menschen werden versuchen und helfen. – freakyhat

+0

Es sieht nicht wie andere Beiträge aus Wie wird das gemacht? – MichaelM

+0

Mit 4 Räumen. Ich werde es für Sie bearbeiten. –

Antwort

0

Nicht zu sagen, das ist die Antwort, weil Sie keine Variablen, Joins zwischen Tabellen oder WHERE-Klauseln haben. Aber für jemanden gerade erst anfangen, wird es wahrscheinlich lookings etwas wie am Ende:

 UPDATE DelTimes 
       SET DelTimes.TicketNo = Tickets.TicketNumber, 
        DelTimes.TicketDate = CONVERT(Date,Tickets.LastOrderDate,5), 
        DelTimes.LOTime = Convert(datetime,Tickets.LastOrderDate,8), 
        DelTimes.LOMinutes = DATEDIFF(minute,Tickets.LastOrderDate, 
Tickets.LastUpdateTime), 
        DelTimes.DriverNam = @DriverName 
     FROM DelTimes 
     JOIN Tickets ON DelTimes.TicketId = Tickets.TicketId 
     JOIN TicketEntities ON TicketEntities.Ticket_Id = Tickets.TicketId 
     WHERE DelTimes.TicketId = @TicketId 
       AND TicketEntities.EntityTypeId = 3 


    IF @@ROWCOUNT = 0 
     INSERT INTO DelTimes (TicketId, TicketNo, TicketDate, LOTime, LOMinutes, DriverNam) 
      VALUES (@TicketId, @TicketNumber, CONVERT(Date,@LastOrderDate,5), 
       Convert(datetime,@LastOrderDate,8), 
       DATEDIFF(minute,@LastOrderDate,@LastUpdateTime), 
       @DriverName) 

Ich bin wahrscheinlich mehr schaden als nützen hier tun, und ihr ist viel darüber Ich mag es nicht, aber das wird erhalten du hast angefangen. (Zur nächsten Fragenrunde.)