Mystisk problem med @@IDENTITY
Hej begavede hoveder.@@IDENTITY har nu voldt mig store problemer i dagevis i forbindelse med nedenstående kode.
Jeg vil med nedenstående kode betingelsesvist gemme forskellige oplysninger i min MS-SQL database.
Kort fortalt gemmer den et event, som kan være enkelt, ugentligt, månedligt eller årligt.
I tabellen ”Mile” gemmes en overordnet ”samling” af understående events for et projektID. Er det, det første event til et givent projektID, skal der derfor oprettes en post Mile. (dette afgøres med variablen ”Stored”).
Er der allerede oprettet en post i ”Mile”, til underliggende events, skal ID’et fra denne hentes og lægges ind som fremmednøgle i de underliggende evets (tabellen ”MileEvents”).
De underliggende ”mønstre” (ugentlig, månedlig eller årlig – tabellerne ” WeeklyPattern”, ”monthlyPattern” og ”YearlyPattern”) skal så have tilknyttet en fremmed nøgle, som er id’et fra det underliggende event(”MileEvents”), der netop blev tilføjet.
Dette virker helt fint så længe, det er det første event af flere – altså så længe ”Stored = false”
Her tildeles fremmednøglerne korrekt i både de underliggende events og til deres mønstre.
Men er Stored = ”true” fungerer SELECT @@IDENTITY- sætningerne af en eller anden grund ikke længere???
Er der nogen, der kan forklare mig hvorfor??
Dette må være dagens længste spørgsmål.
Stored = Request.QueryString("Stored")
If Stored = "true" Then
findStatuSQL = "SELECT * FROM Mile WHERE projektID =" & prj
fns = Conn.Execute(findStatuSQL)
MileID = fns("ID")
Response.Write "MileID=" & fns("ID")
Else
'IndsætEvent
eventSQL1 = "INSERT INTO Mile (ProjektID, startDate,endDate)"
eventSQL1 = eventSQL1 & " VALUES ('" & prj & "','2003-01-01','2005-01-01')"
Conn.ExeCute(eventSQL1)
'Fang det netop indasatte ID
tempSQL = "SELECT @@IDENTITY AS NewID"
Set tempRs = Conn.Execute(tempSQL)
'Sæte mileID til at være denne værdi
MileID = tempRs.Fields("NewID").Value
tempRs.Close
End If
eventSQL2 = "INSERT INTO MileEvents (MileID,MileEventTitel,MileEventBeskrivelse,StartDate,EndDate,allDay,eventTypeID)"
eventSQL2 = eventSQL2 & " Values ('" & MileID & "','" & eventTitle & "','" & eventDescription & "','" & startDate & " " & eventStartTime & "','" & endDate & " " & eventEndTime & "','" & allDay & "','" & eventTypeID & "')"
Conn.Execute(eventSQL2)
'Fang det netop indasatte ID
tempSQL2 = "SELECT @@IDENTITY AS NewID2"
Set tempRs2 = Conn.Execute(tempSQL2)
'Sæte mileEventID til at være denne værdi
MileEventID = tempRs2.Fields("NewID2").Value
Response.Write "MileEventID=" & MileEventID
tempRs2.Close
If eventTypeID = 1 Then
weeklySQL = "INSERT INTO WeeklyPattern (MileEventID,sun,sat,fri,thu,wed,tue,mon,recur)"
weeklySQL = weeklySQL & "VALUES ('" & MileEventID & "','" & sun & "','" & sat & "','" & fri & "','" & thu & "','" & wed & "','" & tue & "','" & mon & "','" & recur &"')"
Conn.Execute(weeklySQL)
ElseIf eventTypeID = 2 Then
monthlySQL = "INSERT INTO MonthlyPattern (MileEventID,day,week,recur)"
monthlySQL = monthlySQL & " VALUES ('" & MileEventID & "','" & evDay & "','" & week & "','" & recur & "')"
Conn.Execute(monthlySQL)
ElseIf eventTypeID = 3 Then
yearlySQL = "INSERT INTO YearlyPattern (MileEventID,day,week,month)"
yearlySQL = yearlySQL & " VALUES ('" & MileEventID & "','" & evDay & "','" & week & "','" & eventMonth & "')"
Conn.Execute(yearlySQL)
End If