2016-02-10 3 views
-2

Ниже мой запрос на вставку, дублирование не происходит во всех вставленных, но это произошло в некоторых случаях, и я не могу найти найти ошибку, и я был застрял в это в течение одной недели, пожалуйста, помогите мнеблокировать повторяющиеся записи во время вставки

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

показать нам свою структуру таблицы или отметить свой основной столбец ключа или Удостоверение ... – Sankar

+1

Вы используете MySQL или MS SQL Server? (Некоторый продукт специфический код есть ...) – jarlh

+0

\t Идентичности Seed \t \t Increment Не для репликации PK_Id \t 0 Pk_id это мой стиль Колонок и дублирование не произошли в Pk_id, но все остальные данные становятся Дублированными и я используя SQL Server 2010 – Sankar

ответ

1

чтобы гарантировать уникальность в таблице, вы убедитесь, что есть ограничение уникальности на столе.

Ниже приведен пример таблицы:

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

Здесь ГНТП (Global Trade Item Number) будет естественным уникальным ключом для таблицы. Вы делаете его первичным ключом, который гарантирует, что элемент будет уникальным в таблице.

Некоторые люди предпочитают работать с техническими идентификаторами. Таким образом, таблица будет выглядеть следующим образом:

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, чтобы не иметь две записи для тот же человек и номер телефона.

Итак, все, что вам нужно сделать, это найти столбцы, которые должны быть уникальными в вашей таблице, и добавить это ограничение. Например .:

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

У меня есть еще один столбец в этой таблице. Имя имеет значение, и я должен разрешить вставлять, когда значение validity равно «E», возможно ли это после использования ограничения, которое у вас есть упомянутое выше? – Sankar

+0

Вы говорите, что хотите уникальность в своей таблице, кроме записей с 'validity = 'E''? Записи с 'validity = 'E'' разрешены для дублирования? Да? –

+0

Да, я хочу уникальность в таблице, за исключением записей с достоверностью = 'E' – Sankar

Смежные вопросы