插入时阻止重复记录

时间:2016-02-10 10:23:07

标签: mysql sql sql-server

下面是我的插入查询,复制并没有发生在已经插入的所有内容中但是在某些情况下发生了,我无法找到找到错误而且我已经被困在这一周,请帮帮我

INSERT INTO Lgen_KYCApprvlDoc
(
  Cust_FK,CustCode,PrpslNo,Doc_FK,
  RecdDt,RecdBy,DocRefNo,DocRefDt,DocValue,
  DocVldUpto,Remarks,DocStage,DocStat,SentFlag,
  KYCID,CrtdDt,CrtdBy,LstModDt,LstModBy,ApprvdDt,
  ApprvdBy,Mandatory,Validity,DocVerifiedStatus
)
select hdnCustomerId,txtCustId,NULL,Pk,
Nullif(b.ReceivedDate,'') As ReceivedDate,
b.ReceivedBy,b.DocRefNo,
Nullif(b.DocIssuedDate,'') As DocIssuedDate,b.DocValue,
Nullif(B.ValidUpto,'') As
ValidUpto,
b.Remarks,b.strdocstage,b.strdocStatus,NULL,b.hdnCboType,
b.SysDate,b.Userid,b.SysDate,b.Userid,
NULL,NULL,NULL,NULL,NULL
From #Lgen_KYCTable b 
Left Outer Join Lgen_KYCApprvlDoc A With(Nolock) 
On a.CustCode=B.txtCustid and A.Doc_FK=b.PK
Where B.Strdocstatus='R' and A.PK_Id Is Null

1 个答案:

答案 0 :(得分:1)

为了保证表格的唯一性,您需要确保在表格上有唯一约束。

以下是一个示例表:

items (gtin, description, price, ...)

此处GTIN(全球贸易项目编号)将是表格的自然唯一键。您将其设为主键,以确保项目在表格中是唯一的。

有些人更喜欢使用技术ID。所以表格看起来像这样:

items (item_id, gtin, description, price, ...)

这里item_id可能是主键,因此是唯一的。但是您还要在GTIN上添加一个唯一约束,以确保表中没有重复项。 (您也可以这样做,并将GTIN作为主键,并为item_id添加唯一约束。)

这也可以是多列,例如有几个电话号码的人:

person_phone (person_phone_id, person_id, phone_number, phone_type)

再次person_phone_id将是您要引入或未引入的技术ID,但无论如何您需要person_id + phone_number上的唯一约束,以便不会有两个条目对于同一个人和电话号码。

所以你要做的就是找到表中必须唯一的列并添加该约束。 E.g:

ALTER TABLE Lgen_KYCApprvlDoc ADD CONSTRAINT unique_apprvldoc UNIQUE (Cust_FK, Doc_FK);