Avatar billede davidfossil Nybegynder
13. marts 2006 - 14:28 Der er 13 kommentarer og
1 løsning

INSERT statement "if not exists"

Er der en nem måde at lave en "INSERT IF NOT EXIST INTO tbl..." - altså indsætte en række, såfremt der ikke allerede findes en med samme primary key?

Jeg kan selvfølgelig wrappe en SELECT rundt om, men kan det gøres mere elegant (som en del af selve INSERT statement)?
Avatar billede arne_v Ekspert
13. marts 2006 - 15:06 #1
en SEL:ECT foerst duer ikke i en flerbruger sammenhaeng

du laver bare en INSERT - den fejler hvis primary key allerede eksisterer
Avatar billede davidfossil Nybegynder
13. marts 2006 - 15:10 #2
God pointe mht concurrency.

Hvis jeg laver en INSERT og den fejler, vil jeg meget gerne kunne fange fejlen og se hvad der gik galt. Er det muligt at gribe fejlen, tjekke om det er en primary key violation og smide den igen hvis fejlen skyldtes noget andet?
Avatar billede arne_v Ekspert
13. marts 2006 - 15:11 #3
en SELECT ...
Avatar billede davidfossil Nybegynder
13. marts 2006 - 15:13 #4
15:11:42 > var det en rettelse til din tidligere kommentar, eller et bud på en løsning?
Avatar billede arne_v Ekspert
13. marts 2006 - 15:16 #5
afhaengig af programmering sproget kan du fange en exception eller
se en status kode som maaske kan fortaelle dig hvad der gik galt
Avatar billede arne_v Ekspert
13. marts 2006 - 15:21 #6
naeh - det var bare for at fjerne det semikkolon jeg havde faaet sat midt i SELECT
Avatar billede davidfossil Nybegynder
13. marts 2006 - 15:38 #7
Jo, jeg kan selvfølgelig fange fejlen i programet "oven på" (som er C#), men jeg ville meget gerne at dette blev ordnet i en stored procedure i stedet. Vil det være muligt at gøre noget lignende dette:

INSERT INTO....
IF @@error = 2627
  @@error = 0

Disclaimer: Jeg fandt 2627 som værende error code for primary access violation på Google, men har endnu ikke testet noget...
Avatar billede davidfossil Nybegynder
13. marts 2006 - 15:38 #8
Eller måske:

INSERT INTO....
IF @@error = 2627
  RETURN
Avatar billede arne_v Ekspert
13. marts 2006 - 15:51 #9
jeg er sikker paa at du kan goere det i en stored procedure

men jeg har ikke syntaxen lige ved haanden
Avatar billede davidfossil Nybegynder
21. marts 2006 - 16:45 #10
Arne : Jeg har uden held ledt på nettet efter eksempler på dette. Har du et bud på hvor jeg kan finde tricket?

Og vil du ikke også smide et svar, tak :)
Avatar billede arne_v Ekspert
21. marts 2006 - 16:51 #11
Avatar billede arne_v Ekspert
21. marts 2006 - 17:01 #13
og et svar
Avatar billede davidfossil Nybegynder
23. april 2006 - 23:06 #14
FYI - og til andre der måtte komme forbi denne tråd ved søgning.
http://www.4guysfromrolla.com/webtech/041906-1.shtml
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester