24. juni 2005 - 15:53Der er
11 kommentarer og 1 løsning
INSERT og UPDATE i samme query ?
Jeg vil gerne indsætte en række hvor en af værdierne består af en kombination af det unikke id, som rækken får, og en anden værdi. I dette eksempel vil jeg gerne lave et AppointmentHandle, som består af AppointmentName + unik id. Noget a la det her (som ikke virker):
Ovenstående query indsætter godt nok en række med et AppointmentName, men AppointHandle får tildelt NULL. Det er et eller andet med @@Identity, der går galt, for hvis jeg hardcoder et tal, virker det fint
jeg tror ikke at du kan bruge @@IDENTITY førend INSERT er udført
det er også i modstrid med alle teorier om relations databaser at gemme redundant data på den måde - hvorfor konstrurerer du ikke den størrelse når du henter ud ?
Det er et forsøg på at lave et sammensat id, som jeg kan addressere rækken med. Det er måske ikke den mest optimale måde at gøre det på, så andre forslag modtages gerne. Det SKAL dog være en kombination af AppointmentName og et unikt nummer
@@identity får tildelt det sidst "automatisk tildelte" id i den session du har gang i. Hvis du ikke har lavet en insert hvor der indgår et felt med identity, så er @@identity = null. hvis du bare skal have et unikt id i AppointmentHandle skal du bare sætte identity på den kolonne.
jeg er nybegynder i MS SQL, så muligvis er det min manglende forståelse, der gør det, men hvis der er angivet en identity-column i min tabel, er det så ikke den, som @@IDENTITY refererer til (i nedenstående eksempel altså "AppointmentID") ? En simpel version af min tabel består af følgende: AppointmentID (int og primary key). Den inkrementeres med 1, når der indsættes data AppointmentName (string). AppointmentHandle (string). Denne skal være unik, og AppointmentName, skal indgå som en del af værdien.
et felt med identity skal/kan du ikke indsætte en værdi i, det gør DB'en selv når du indsætter en række. med @@identity kan du så hente det id DB'en lige har tildelt, hvis du altså skal bruge det til noget. Kunne f.eks. bruges hvis du har nogle tabeller der er relateret til hinanden.
Såvidt jeg kan se, får jeg tildelt et unikt nummer til mit handle, så det er fint for mig. Jeg har dog stadig ikke forstået hvorfor @@IDENTITY ikke virker (returnerer NULL, men at IDENT_CURRENT('Appointments') gør, når det er samme tabel, jeg bruger ?
returnerer bare et fra en tidligere INSERT evt. lavet af en helt anden bruger
Synes godt om
Ny brugerNybegynder
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.