przed wstawieniem wyzwalacza dla wstawiania zduplikowanych wierszy do innej tabeli
Mam stół o nazwietblspmaster
w której kolumnie sp mam unikalny indeks, więc nie będą wstawiane duplikaty, ale chcę wstawić zduplikowane wiersze dotblspduplicate
. więc zdecydowałem się napisać do tego wyzwalacz. IN tabela główna, która jesttblspmaster
rekordy zostaną wstawione za pomocą opcji Załaduj plikmysql
create trigger tblspmaster_noduplicate
before insert on tblspmaster
for each row
begin
if ( select count(sp) from tblspmaster where sp=new.sp > 0 )then
insert into tblspduplicate (sp,FileImported,AMZFileName) values (NEW.sp,NEW.FileImported,NEW.AMZFileName)
END
END
Mam listę pytań
Czy to właściwe podejście, aby zatrzymać duplikaty i wstawić je do innej tabeli?
Mój wyzwalacz nie jest wykonywany, ponieważ pokazuje pewne błędy składniowe
Odpowiedź na BŁĄD toError Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END END' at line 7
****************EDYCJA**************
tutaj znajduje się definicja tabeli dla tabeli głównej i zduplikowanej oraz instrukcje wyzwalania i ładowania pliku danych MySQL
CREATE TABLE IF NOT EXISTS `tblspmaster` (
`CSN` bigint(20) NOT NULL AUTO_INCREMENT,
`SP` varchar(10) NOT NULL,
`FileImportedDate` date NOT NULL,
`AMZFileName` varchar(50) NOT NULL,
`CasperBatch` varchar(50) NOT NULL,
`BatchProcessedDate` date NOT NULL,
`ExpiryDate` date NOT NULL,
`Region` varchar(50) NOT NULL,
`FCCity` varchar(50) NOT NULL,
`VendorID` int(11) NOT NULL,
`LocationID` int(11) NOT NULL,
PRIMARY KEY (`CSN`),
UNIQUE KEY `SP` (`SP`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10000000000 ;
CREATE TABLE IF NOT EXISTS `tblspduplicate` (
`SP` varchar(50) NOT NULL,
`FileImportedDate` date NOT NULL,
`AMZFileName` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
use casper;
DELIMITER $
create trigger tblspmaster_noduplicate
before insert on tblspmaster
for each row
begin
if ( select count(sp) from tblspmaster where sp=new.sp > 0 ) then
insert into tblspduplicate (sp,FileImportedDate,AMZFileName) values (NEW.sp,NEW.FileImportedDate,NEW.AMZFileName);
END IF;
END$
DELIMITER ;
LOAD DATA local INFILE 'E://31october//SP//sp_files_sample1//400k sp00 6-19 E.csv'
INTO TABLE tblspmaster
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(sp);
Oto jeden wątek w historii, że wykonuję to polecenie MySql z aplikacji konsoli c #, ale nie sądzę, aby miało to jakikolwiek wpływ na naszą strukturę lub program związany z db. Muszę także usunąćIGNORE 1 LINES
instrukcja, ponieważ nie będzie wiersza nagłówka.