[ teri_kalijer @ 12.10.2016. 11:27 ] @
Potrebna mi je pomoć sa problemom na koji sam naišao kod INSERT-a grupe slogova u tabelu. Ako se ne varam, u MS SQL Serveru, pri INSERT-u grupe slogova u tabelu (INSERT INTO ... SELECT * FROM), zbog atomičnosti transakcije, ako neki od slogova nije ispravan iz ovog ili onog razloga, cela grupa slogova biće odbačena. To je u redu. Sad, imam neku veću obradu: učitavanje slogova u bazu iz gomile XML fajlova. XML fajlovi se parsiraju i podaci iz njih se učitaju u privremene tabele, zatim se iz njih, ako podaci već ne postoje u bazi, kroz SELECT * radi INSERT slogova u bazu, u mnogobrojne stalne tabele. Bilo bi poželjno da, pri tom 'grupnom' INSERT-u slogova iz privremenih u stalne tabele, ako neki od slogova nije ispravan, ne budu odbačeni svi slogovi, već samo neispravni. Tako da je moje glavno pitanje: da li je to moguće - nekako 'reći' MS SQL-u da, pri jednom 'grupnom' INSERT-u, odbaci samo te neispravne slogove, a učita ispravne? Alternativa mi je da učitavanje radim 'pešaka': kroz petlju čitati slog po slog iz privremene tabele, započeti transkaciju, zatim pokušati INSERT u stalnu tabelu. Ako nema greške, COMMIT-ujem transakciju i čitam novi slog, u protivnom hendlujem neispravni slog. Međutim, to bi dosta usporilo obradu, koja je i ovako zahtevna. Zbog prirode obrade i brojnih INNER JOIN-ova koji se, tokom učitavanja, uspostavljaju između privremenih i stalnih tabela, BULK INSERT nije zgodna opcija. |