Microsoft SQL Serverを使用していました。私は両方の関数を使用してテーブルに入るデータを解析したい。だから私はクロス適用と外側適用を一緒に使用します。クロス適用と外部適用を併用する場合のPRIMARY KEY制約の違反
CROSS APPLY CA_Parse_CorpActnDtls_fn(MessageID) ent
outer apply CA_Parse_CorpActnOptnDtls_fn(ev.MessageID) cod
しかし、私はこれをしなかったときには、以下のERRO文句:PRIMARY KEY制約 'PK_AfterParse_CA_Events' の
違反を。オブジェクト 'dbo.AfterParse_CA_Events'に重複キーを挿入できません。重複するキー値は(105818432,37819929)です。 ステートメントが終了しました。全体のT-SQLコードは次のように見えます
:
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
あなたは私のユーザー定義されたを使用してLSCI_DateOfRecordデータを構成したいので、私はCA_Parse_CorpActnOptnDtls_fn(ev.MessageID) 第2の機能を必要とすることがわかります関数。 2つの関数を一緒に使用すると重複を避ける方法はありますか?
または、2番目の関数CA_Parse_CorpActnOptnDtls_fn(ev.MessageID)からLSCI_DateOfRecordとRoundingDescの一時リストを個別に作成する方法はありますか?そして、私はテーブルを更新することができます。
ご協力いただきまして誠にありがとうございます。
を使用して、単純化したデモのですか? – DVT
これにはいくつかの方法があります。しかし、それらはすべてあなたが複製物を意味するものに依存しています。重複したキー値か、重複している行全体ですか?たぶん単純なグループで問題を解決するだろう。多分何か。 –
サンプルデータの中には、あなたが持っている2つのUDFの定義と同じく、長い道のりがあります。これは、あなたが複製として定義するものを理解するのに役立ちます。あなたが何を得ているか(選択声明として)、あなたが見たいと思っているものを提示してください。 – Eli