ошибка при обновлении данных:
Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "PK_CARDS" on table "CARDS".
unknown ISC error 335545072.
LI-V6.3.1.32609 Firebird 3
при выполнении:
MERGE INTO CARDS M
USING (SELECT CARDID,BARCODE,CARDON,CARDTYPE,ID,FIO,TEL,TELHOME,CORRECTION,RATING FROM "##CARDS4_LOAD" WHERE :SHORT_DISCOUNT_ = 0 OR (:SHORT_DISCOUNT_ = 1 AND ID > :MODIFY_ AND ID < 99991231)) P
ON P.CARDID = M.CARDID
WHEN MATCHED THEN
UPDATE SET
M.BARCODE = P.BARCODE,
M.CARDON = P.CARDON,
M.CARDTYPE = P.CARDTYPE,
M.ID = P.ID,
M.FIO = P.FIO,
M.TEL = P.TEL,
M.TELHOME = P.TELHOME,
M.CORRECTION = P.CORRECTION,
M.RATING = P.RATING
WHEN NOT MATCHED THEN
INSERT(CARDID,BARCODE,CARDON,CARDTYPE,ID,FIO,TEL,TELHOME,CORRECTION,RATING)
VALUES(P.CARDID,P.BARCODE,P.CARDON,P.CARDTYPE,P.ID,P.FIO,P.TEL,P.TELHOME,P.CORRECTION,P.RATING);
с параметрами:
SHORT_DISCOUNT_=1
MODIFY_=20161020
хотя в таблицах CARDS и "##CARDS4_LOAD" дублей по CARDID нет
проверял так:
select cardid,count(*) cnt from "##CARDS_LOAD" group by cardid having count(*)>1
select cardid,count(*) cnt from CARDS group by cardid having count(*)>1
+ |
CREATE TABLE CARDS ( CARDID VARCHAR(10) NOT NULL, BARCODE VARCHAR(13), CARDON SMALLINT, CRDDATEON VARCHAR(255), CRDDATEOFF VARCHAR(255), CARDTYPE INTEGER, CLIENT INTEGER, SUMALL NUMERIC(16,2), STAT INTEGER, ID BIGINT DEFAULT 0 NOT NULL, UPDATE_DATE D_DATETIME DEFAULT '30-DEC-1899' NOT NULL, FIO VARCHAR(150), TEL VARCHAR(50), TELHOME VARCHAR(50), CORRECTION INTEGER DEFAULT 0 NOT NULL, RATING INTEGER DEFAULT 0 NOT NULL );
ALTER TABLE CARDS ADD CONSTRAINT PK_CARDS PRIMARY KEY (CARDID); CREATE INDEX CARDS_BARCODE_IDX ON CARDS (BARCODE); CREATE INDEX CARDS_IDX ON CARDS (ID); CREATE INDEX CARDS_IDX1 ON CARDS (STAT, BARCODE); CREATE INDEX CARDS_UPDATE_DATE_IDX ON CARDS (UPDATE_DATE);
CREATE TABLE "##CARDS4_LOAD" EXTERNAL 'CARDS4_LOAD.DAT' ( ID D_IDENTITY NOT NULL, CARDID VARCHAR(10) NOT NULL, BARCODE D_BARCODE, CARDON D_BOOLEAN, CRDDATEON D_DATETIME, CRDDATEOFF D_DATETIME, CARDTYPE INTEGER NOT NULL, CLIENT INTEGER, SUMALL D_MONEY, STAT INTEGER, FIO VARCHAR(150), TEL VARCHAR(50), TELHOME VARCHAR(50), CORRECTION INTEGER, RATING INTEGER, EOL CHAR(2) CHARACTER SET OCTETS );
|