webForumDet fria alternativet

Fetcha AutoID

9 svar · 296 visningar · startad av SteveP

StevePMedlem sedan mars 2003772 inlägg
#1

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
#2

variabeln @@IDENTITY innehåller räknarvärdet för den nyss insatta posten. Alltså:

SELECT @@IDENTITY

Mvh

StevePMedlem sedan mars 2003772 inlägg
#3

Är @@IDENTETY alltid Primary keyn?

@ndersMedlem sedan juni 200032 969 inlägg
#4

Nej, det är räknarvärdet. Det spelar ingen roll vilket fält som är primärnyckel.

mvh

StevePMedlem sedan mars 2003772 inlägg
#5
	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
#6

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
#7

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
#8

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
#9

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
#10

Aha, så allt väl, och kakorna smakar mao?

Mvh

125 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)