StevePMedlem sedan mars 2003772 inlägg När jag gjort en INSERT så skapas ett unikt ID för posten.
Kan jag på nåt sett få tag på det ID't i en variabel?
Trigger kanske vore lämpligast?
Jag hade tänkt mig nåt sånthär:
CREATE trigger tg_SelectID_LCPFiles on tblLCPFiles
for insert
as
select <IDT som Skapades> as LatestID from tblLCPFiles
Men hur selectar jag ID't som precis skapades?
Är detta åt rätt håll?
select @LCPFileID = LCPFileID from Created
@ndersMedlem sedan juni 200032 969 inlägg variabeln @@IDENTITY innehåller räknarvärdet för den nyss insatta posten. Alltså:
SELECT @@IDENTITY
Mvh
StevePMedlem sedan mars 2003772 inlägg Är @@IDENTETY alltid Primary keyn?
@ndersMedlem sedan juni 200032 969 inlägg Nej, det är räknarvärdet. Det spelar ingen roll vilket fält som är primärnyckel.
mvh
StevePMedlem sedan mars 2003772 inlägg strSQL = "SpLCPFiles_Insert " _
& ContactID & ",'" _
& OpenDate & "'"
ObjConn.Execute(strSQL)
Response.Write ObjRs("NewID")
SP'n ser ut såhär
CREATE PROCEDURE spLCPFiles_Insert
@ContactID INT,
@OpenDate DATETIME
AS
INSERT INTO TblLCPFiles
(
ContactID,
OpenDate
)
VALUES
(
@ContactID,
@OpenDate
)
SELECT @@IDENTITY AS NewID
GO
Jag har kört den i Query Analyzer och den returnerar ett fält med det nya ID't och fältet heter NewID
Men när jag försöker skriva ut det med Response.Write ObjRs("NewID")
Så får jag Item cannot be found in the collection corresponding to the requested name or ordinal.
@ndersMedlem sedan juni 200032 969 inlägg Det är för att din procedur faktiskt returnerar två recordsets. Det första är helt tomt, med informationen "1 record(s) affected", och det andra innehåller den information du vill ha. Du kommer ifrån detta genom att överst i din procedur stänga av funktionen som räknar hur många rader som påverkats.
CREATE PROCEDURE spLCPFiles_Insert
@ContactID INT,
@OpenDate DATETIME
AS
[b]SET NOCOUNT ON[/b]
INSERT INTO TblLCPFiles
(
ContactID,
OpenDate
)
VALUES
(
@ContactID,
@OpenDate
)
SELECT @@IDENTITY AS NewID
GO
Mvh
StevePMedlem sedan mars 2003772 inlägg Det gjorde ingen skillnad tyvärr
CREATE PROCEDURE spLCPFiles_Insert
@ContactID INT,
@OpenDate DATETIME
AS
SET NOCOUNT ON
INSERT INTO TblLCPFiles
(
ContactID,
OpenDate
)
VALUES
(
@ContactID,
@OpenDate
)
SELECT @@IDENTITY AS NewID
GO
@ndersMedlem sedan juni 200032 969 inlägg Hmm. Lustigt. Inte för jag vet vad det skulle göra för skillnad, men prova att slänga bort GO ur koden. Jag kan inte tro att det skulle behövas.
Mvh
StevePMedlem sedan mars 2003772 inlägg Det var en dum miss av mig :)
Jag öppnade inte med ObjRs
Såhär hade jag innan som du ser ovan.
ObjConn.Execute(strSQL)
Bytte ut det mot
Set ObjRs = ObjConn.Execute(strSQL)
@ndersMedlem sedan juni 200032 969 inlägg Aha, så allt väl, och kakorna smakar mao?
Mvh