|
| 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
| |
|
|