Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Insert into iz jedne u drugu tabelu

[es] :: MS SQL :: Insert into iz jedne u drugu tabelu

[ Pregleda: 3485 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.bg.wifi.vline.verat.net.



+104 Profil

icon Insert into iz jedne u drugu tabelu27.04.2005. u 00:34 - pre 231 meseci
U source tabeli pored svih mogucih polja imam i jedno polje pod nazivom "Lokacija"

U destination tabeli imam:
1. IDLokacije INT IDENTITY PRIMARY KEY
2. NazivLokacije NCHAR
3. OpisLokacije NTEXT

Source tabela moze da ima mnooogo rekorda (trenutna situacija je preko 400000), ali uglavnom samo par različitih lokacija. Potrebno je da:

1. iz source tabele izvucem razlicite lokacije
2. Proverim da li te lokacije postoje u dest tabeli
3. Ako ne postoje da ih upisem u tu tabelu

Nasao sam jedno resenje sa SP, ali mi deluje mnogo komplikovano za ovako jednostavnu operaciju. Postoji li jednostavnije resenje?

Code:

SET NOCOUNT ON

declare @ID Int
declare @lokacija char (100)

declare cur_temp cursor for 
select distinct(Lokacija) from tblTest

open cur_temp

fetch next from cur_temp into
@lokacija

while @@FETCH_STATUS=0
    begin
    if @lokacija is not null
        begin
        select idLokacije from tblLokacije where NazivLokacije = @lokacija
        if @@ROWCOUNT=0
            begin
            insert into tblLokacije (NazivLokacije) values (@lokacija)
            end
        end

    fetch next from cur_temp into
    @lokacija
    end

close cur_temp
deallocate cur_temp

Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Insert into iz jedne u drugu tabelu27.04.2005. u 07:41 - pre 231 meseci
Hm. Ti se baš naložio na while.

Code:

insert into destination
select distinct lokacija from source
where lokacija not in (select lokacija from destination)
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.bg.wifi.vline.verat.net.



+104 Profil

icon Re: Insert into iz jedne u drugu tabelu27.04.2005. u 10:37 - pre 231 meseci
pa ne znam kako drugacije da uradim :(

Inače ovaj kod što si napisao sam i sam probao odmah na pocetku, ali ne radi. Javlja grešku:
Citat:
Column name or number of supplied values does not match table definition.


Predpostavljam da je to zato sto u dest tabeli imam 3 kolone, a iz source tabele uzimam samo jednu.
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Insert into iz jedne u drugu tabelu27.04.2005. u 10:47 - pre 231 meseci
Hm pa ne možeš očekivati sve na tacni... Čitaj malo uputstva.

Probaj
Code:

insert into destination
select distinct lokacija, '' from source
where lokacija not in (select lokacija from destination)
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.bg.wifi.vline.verat.net.



+104 Profil

icon Re: Insert into iz jedne u drugu tabelu27.04.2005. u 11:44 - pre 231 meseci
Pa probao sam i to, ali greska je:

Citat:
The text, ntext, or image data type cannot be selected as DISTINCT.


probao sam i

Code:
insert into tblLokacije

select distinct (lokacija), null from tblTest

where lokacija not in (select lokacija from tblLokacije)

ali sa istom greskom
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Insert into iz jedne u drugu tabelu27.04.2005. u 11:58 - pre 231 meseci
Kapiram.. Možda ćeš morati da iskoristiš jednu temp tabelu
Code:

select distinct lokacija
into #temp
from source
where lokacija not in (select lokacija from destination)

insert into destination
select lokacija, '' from #temp

drop table #temp
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.bg.wifi.vline.verat.net.



+104 Profil

icon Re: Insert into iz jedne u drugu tabelu27.04.2005. u 13:34 - pre 231 meseci
to vec moze. Hvala
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Insert into iz jedne u drugu tabelu29.04.2005. u 13:57 - pre 231 meseci
Imas li neki mnogo jak razlog da ti lokacija bude Text tipa? Zar nije mogao neki varchar ili nvarchar? Onda bi ti radio DISTINCT :-)

I jos nesto, kveriji tipa

SELECT Source.Lokacija FROM Source
WHERE Source.Lokacija NOT IN (SELECT Destination.lokacija FROM Destination)

mogu da rade sporo, ako je Destination tabela sa mnogo rekorda. zasto - pa za svaki rekord u Source, mora se izvrsiti subquery (SELECT Destination.lokacija FROM Destination) koji selektuje SVE rekorde iz tabele Destination.

negde sam nasao da je bolje (i uverio se licno) ovako:

SELECT Source.Lokacija FROM Source AS A
WHERE Source.Lokacija NOT EXISTS (SELECT Destination.lokacija FROM Destination AS B WHERE A.Lokaciaj=B.Lokacija)

Zasto? Ponovo se izvrsava subkveri tacno jednom za svaki rekord u Source. Ali, umesto da subkveri vuce SVE rekorde iz Destination, vuci ce samo one gde je Destination.Lokacija=Source.Lokacija

Na malim tabelama verovatno nema veze, ali za 100,000 rekorda u SOurce i 200,000 u Destination zasigurno ima razlike. I jos nesto, budi siguran da imas INDEX na poljima Lokacija u obe tabele. Radi moooogo brze, garantovano.

:-)
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.bg.wifi.vline.verat.net.



+104 Profil

icon Re: Insert into iz jedne u drugu tabelu29.04.2005. u 14:26 - pre 231 meseci
Citat:
Zidar: Imas li neki mnogo jak razlog da ti lokacija bude Text tipa? Zar nije mogao neki varchar ili nvarchar? Onda bi ti radio DISTINCT :-)


Nije mi NazivLokacije nText vec njen opis posto ne znam koliki ce biti maksimalan opis.

Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

[es] :: MS SQL :: Insert into iz jedne u drugu tabelu

[ Pregleda: 3485 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.