Ich verwendete Microsoft SQL Server. Ich möchte beide Funktionen verwenden, um Daten in meine Tabelle zu parsen. Also verwende ich Cross Apply und Outer Apply zusammen.Verletzung der PRIMARY KEY-Einschränkung bei Verwendung von Kreuz anwenden und äußere zusammen anwenden
CROSS APPLY CA_Parse_CorpActnDtls_fn(MessageID) ent
outer apply CA_Parse_CorpActnOptnDtls_fn(ev.MessageID) cod
Aber wenn ich tat dies es zu folgendem erro klagen:
Verletzung der PRIMARY KEY-Einschränkung 'PK_AfterParse_CA_Events'. Kann doppelten Schlüssel in Objekt "Dbo.AfterParse_CA_Events" nicht einfügen. Der doppelte Schlüsselwert ist (105818432, 37819929). Die Anweisung wurde beendet.
Der ganze T-SQL-Code wie folgt aussieht:
insert into AfterParse_CA_Events (
EventID
,MessageID
,cdtprFunction
,CreationDate
,MsgDefIdr
,EventType
,CFI
,EventProcessingType
,MndtryVlntryEvtTp
,RecordDate
,EffectiveDate
,DueBillRdmDate
,CUSIP
,LSCI_DateOfRecord
,RoundingDesc
)
SELECT ent.EventID
,ent.MessageID
,ent.cdtprFunction
,ent.CreationDate
,ent.MsgDefIdr
,ent.EventType
,ent.CFI
,ent.EventProcessingType
,ent.MndtryVlntryEvtTp
,ent.RecordDate
,ent.EffectiveDate_Cmpny
,ent.DueBillRdmDate
,ent.CUSIP
,ROXSQL.dbo.GetNthTradeDay_fn(
case when ent.EventProcessingType = 'DISN'
then COALESCE (ent.ExDividendDate, ent.RecordDate)
ELSE COALESCE(ent.EffectiveDate_Xchg, ent.EffectiveDate_Cmpny,cod.EarliestPaymentDate_Secu,cod.PaymentDate_Secu ,cod.PaymentDate_Cash)
END,-1) AS LSCI_DateOfRecord
,cod.RoundingDesc
FROM #EventsToDo ev
CROSS APPLY CA_Parse_CorpActnDtls_fn(MessageID) ent
outer apply CA_Parse_CorpActnOptnDtls_fn(ev.MessageID) cod
Sie können sehen, dass ich die zweite Funktion CA_Parse_CorpActnOptnDtls_fn (ev.MessageID) benötigen weil ich ein LSCI_DateOfRecord Daten mit meinem Benutzer definiert komponieren will Funktion. Gibt es also eine Möglichkeit, das Duplikat zu vermeiden, wenn ich die beiden Funktionen zusammen benutze?
oder gibt es Möglichkeiten, eine temporäre Liste für die LSCI_DateOfRecord und RoundingDesc von der zweiten Funktion CA_Parse_CorpActnOptnDtls_fn (ev.MessageID) separat zu erstellen? Und dann kann ich die Tabelle aktualisieren.
Jede Hilfe wird sehr geschätzt.
Können Sie sie in einer temporären Tabelle einfügen, das Duplikat entfernen und in der realen Tabelle einfügen? – DVT
Es gibt mehrere Möglichkeiten, dies anzugehen. Aber sie alle hängen davon ab, was du mit einem Duplikat meinst. Ist es nur ein doppelter Schlüsselwert oder werden ganze Zeilen dupliziert? Vielleicht würde eine einfache Gruppe das Problem lösen. Vielleicht etwas anderes. –
Einige Beispieldaten würden hier einen langen Weg zurücklegen, ebenso wie die Definition dieser 2 UDFs, die Sie haben. Dies würde uns helfen zu verstehen, was Sie als Duplikat definieren. Bitte zeigen Sie uns, was Sie bekommen (als eine Select-Anweisung) und was Sie erwarten würden – Eli