/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
t-sql/mssql insert ignore
Fra : Leif Neland


Dato : 15-07-08 09:05

Jeg vil indsætte en et antal rækker, (TNT,ordrenummer) i en tabel, hvor
TNT er unik.

Det er muligt at TNT allerede er indlæst en gang, men det er ikke en
fejl, det skal bare ignoreres.

I Mysql ville jeg bare

INSERT IGNORE (TNT,ordre) into pakker values
("012345676DK",12345),
("012345678DK",12346),
("012345673DK",12348),
("012345622DK",12347)

(Eller REPLACE INTO)

Men mssql kender ikke den syntaks.
Er der andre muligheder end for hver enkelt record se om TNT findes, og
hvis ikke, så indsætte recorden?

Leif

 
 
Arne Vajhøj (16-07-2008)
Kommentar
Fra : Arne Vajhøj


Dato : 16-07-08 00:55

Leif Neland wrote:
> Jeg vil indsætte en et antal rækker, (TNT,ordrenummer) i en tabel, hvor
> TNT er unik.
>
> Det er muligt at TNT allerede er indlæst en gang, men det er ikke en
> fejl, det skal bare ignoreres.
>
> I Mysql ville jeg bare
>
> INSERT IGNORE (TNT,ordre) into pakker values
> ("012345676DK",12345),
> ("012345678DK",12346),
> ("012345673DK",12348),
> ("012345622DK",12347)
>
> (Eller REPLACE INTO)
>
> Men mssql kender ikke den syntaks.
> Er der andre muligheder end for hver enkelt record se om TNT findes, og
> hvis ikke, så indsætte recorden?

Hvis det er en undtagelse at den allerede er indsat, så var det vel mest
logisk at bare indsætte og så ignorere en fejl der opstår (evt. teste
på fejl type så andre fejl ikke "sluges").

Arne

Leif Neland (16-07-2008)
Kommentar
Fra : Leif Neland


Dato : 16-07-08 01:21

Arne Vajhøj skrev:
> Leif Neland wrote:
>> Jeg vil indsætte en et antal rækker, (TNT,ordrenummer) i en tabel,
>> hvor TNT er unik.
>>
>> Det er muligt at TNT allerede er indlæst en gang, men det er ikke en
>> fejl, det skal bare ignoreres.
>>
>> I Mysql ville jeg bare
>>
>> INSERT IGNORE (TNT,ordre) into pakker values
>> ("012345676DK",12345),
>> ("012345678DK",12346),
>> ("012345673DK",12348),
>> ("012345622DK",12347)
>>
>> (Eller REPLACE INTO)
>>
>> Men mssql kender ikke den syntaks.
>> Er der andre muligheder end for hver enkelt record se om TNT findes,
>> og hvis ikke, så indsætte recorden?
>
> Hvis det er en undtagelse at den allerede er indsat, så var det vel mest
> logisk at bare indsætte og så ignorere en fejl der opstår (evt. teste
> på fejl type så andre fejl ikke "sluges").
>
> Arne
Desværre, så kan man vist ikke vide hvor mange records der er blevet
indsat, hvis een af de unike nøgler allerede er der.

Så jeg bliver nok nødt til at indsætte een af gangen. Og når der
alligevel skal loopes, så er det ikke den større ulejlighed at checkke
om nøglen allerede er der.

Leif

Arne Vajhøj (16-07-2008)
Kommentar
Fra : Arne Vajhøj


Dato : 16-07-08 04:10

Leif Neland wrote:
> Arne Vajhøj skrev:
>> Leif Neland wrote:
>>> Jeg vil indsætte en et antal rækker, (TNT,ordrenummer) i en tabel,
>>> hvor TNT er unik.
>>>
>>> Det er muligt at TNT allerede er indlæst en gang, men det er ikke en
>>> fejl, det skal bare ignoreres.
>>>
>>> I Mysql ville jeg bare
>>>
>>> INSERT IGNORE (TNT,ordre) into pakker values
>>> ("012345676DK",12345),
>>> ("012345678DK",12346),
>>> ("012345673DK",12348),
>>> ("012345622DK",12347)
>>>
>>> (Eller REPLACE INTO)
>>>
>>> Men mssql kender ikke den syntaks.
>>> Er der andre muligheder end for hver enkelt record se om TNT findes,
>>> og hvis ikke, så indsætte recorden?
>>
>> Hvis det er en undtagelse at den allerede er indsat, så var det vel mest
>> logisk at bare indsætte og så ignorere en fejl der opstår (evt. teste
>> på fejl type så andre fejl ikke "sluges").
>>
> Desværre, så kan man vist ikke vide hvor mange records der er blevet
> indsat, hvis een af de unike nøgler allerede er der.
>
> Så jeg bliver nok nødt til at indsætte een af gangen.

Det antog jeg også at du gjorde. Hvis du bundter dem i en
enkelt transaktion, så er overhead ikke så stort.

> Og når der
> alligevel skal loopes, så er det ikke den større ulejlighed at checkke
> om nøglen allerede er der.

Du skal jo alligevel teste for fejl, for at være flerbruger sikker,
så en select først er ren spild.

Arne

Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste