26. oktober 1999 - 14:26Der er
15 kommentarer og 1 løsning
Hvordan findes ID'et i tabellen
Jeg har en almindelig INSERT statement, hvor jeg skal bruge dens primær nøgle værdi som har en autonumber type (jeg har upsizet fra Access).
F.eks. ser tabellen sådan ud: id int navn varchar(100) tlf varchar(12)
... hvis jeg så siger:
INSERT INTO(navn, tlf) VALUES('her', '12345678')
Hvordan får jeg fat i ID feltet??? Hvis man siger SELECT @@IDENTITY as mitID from minTabel så er resultatet rimelig mystisk. Det holder heller ikke at SELECTe den record der her 'her' og '12345678' i, da nogle records er næsten ens.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Hele humlen omkring identity er at du ikke skal bekymre dig omkring feltet ved insert, derfor må du heller ikke angive et identity felt i din værdi liste
Det gør vist ingen forskel om det gøres i en transaction, fordi @@Identity er en global variable som benyttes for alle identity field. jeg mener ikke at access til globale variable inkluderes i transaktion. Derfor er denne løsning ikke multiuser sikret, ej hellere i en transaktion. et af mine andre forslag er sikret imod multiuser problematikken
set dbConnection = Server.CreateObject("ADODB.Connection") dbConnection.Open Application("connectionString") SQLStatement1 = "DECLARE @studentID Integer" SQLStatement1 + "INSERT INTO student (navn, tlf) VALUES ('test', 'test')" SQLStatement1 + "SELECT @studentID = @@IDENTITY FROM student" SQLStatement1 + "INSERT INTO student (ID, navn, tlf) VALUES (@studentID, 'test', 'test')" dbConnection.Execute(SQLStatement1) set r = dbConnection.Execute(SQLStatement1)
Det hele skal køres på engang eller kender serveren ikke længere variablen, fordi variabler lever kun indtil næste go statement eller indtil connection forsvinder og det gør den i dit tilfælde.
Ja det virker, men husk på at i ekstreme tilfælde kan du risikere at få en andens brugers unikke nr. Det skal du lige huske er at undersøge om du vil tillade dette. Hvis du ikke vil tillade dette er der andre metoder!!!, som er lidt mere besværlige end nævnte
Nej for det sker måske i 0.005 af tilfældende. Desuden hvis du låser databasen ødelægger du at der kan være flere på systemet afgang og vil få lange svartider. løst beskrivet lavet det således man har en tabel med en kolonne som indeholder det sidste uniknr, så laver man en stored procedure der ligger i en transaktion, som først opdatere kolonnen med værdien af kolonnen + 1 og derefter select kolonnen som returnerer værdien
Grunden til at det er multibruger sikret er fordi når man først opdater og læser en værdi fra en tabel i en transaktion, så kan andre connection ikke opdatere felt men må vente til det bliver deres turn
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.