webForumDet fria alternativet

select @@identity

8 svar · 428 visningar · startad av Arne

ArneMedlem sedan maj 2000267 inlägg
#1

I gamla ASP kunde jag direkt efter jag gjort en insert plocka ut senaste id genom:

Set RS = Conn.execute("select @@identity")
senaste_id = RS(0)

Hur gör jag jag i ASP.NET (VB, kan inte C#) för att enkelt plocka ut mitt senaste insert id?

DinoMedlem sedan sep. 20011 914 inlägg
#2

Är det i samband med en INSERT eller bara ta ut det senast IDt.

red// Dum fråga. Ändrar frågan

ArneMedlem sedan maj 2000267 inlägg
#3

SQL server 2000

SQL server 2000.........

nikoMedlem sedan juni 20022 599 inlägg
#4
SQLCommand cmd=new SQLCommand("SET NOCOUNT ON INSERT INTO .. SELECT @@IDENTITY SET NOCOUNT OFF", dinconnection);
senaste_id = (int)cmd.ExecuteScalar();

Borde kunna funka?

DinoMedlem sedan sep. 20011 914 inlägg
#5

Blir väl så här i vb.net

Function InsertGrr(ByVal a As String, ByVal b As String) As Integer
   Dim para as SqlParameter
   Dim returnID as Integer
   Dim conn as new SqlConnection([i]connectionstring[/i])
   Dim cmd as new SqlCommand("up_InsertGrr", conn)
   cmd.CommandType = CommandType.StoredProcedure
   
   cmd.ParaMeters.Add("@a", SqlDbType.NVarChar, 100).Value = a       
   cmd.Parameters.Add("@b", SqlDbType.NVarChar, 100).Value = b
   para = cmd.Parameters.Add("@id", SqlDbType.Int)      
   para.Direction = ParameterDirection.Output

   try
      cmd.ExecutNonQuery()
      returnID = cmd.Parameters("@id").Value
   catch ex as Exception
       'gör något
   finally
      conn.Close()
   end try
   return returnID
End Function

StoredProcedure

CREATE PROCEDURE up_InsertGrr
@a nvarchar(100),
@b nvarchar(100),
@id int OUTPUT
AS
SET NOCOUNT ON
INSERT grr(grr_a, grr_b) 
VALUES(@a, @b)
SET @id = @@IDENTITY
GO
ArneMedlem sedan maj 2000267 inlägg
#6

id blir 0

Hmmm får det inte att fungera.
Jag kör denna kod efter insert men jag får bara värdet 0
Varför?

	Dim identity as integer
		Dim MyCommand As New SqlCommand("select @@identity as identity FROM min_tabell", MyConnection)
	Response.Write(identity)

Min lösning är just nu att köra Select Top 1 id

Men den lösningen är väl inte 100....

Någon kan ju hinna lägga in före, jag vill ha direkt det id min insert gav...

nikoMedlem sedan juni 20022 599 inlägg
#7

Provade du det jag skrev?

I VB.NET:

Dim MyCommand As SqlCommand = New SqlCommand("SET NOCOUNT ON INSERT INTO .. <fyll på din insert här> SELECT @@IDENTITY SET NOCOUNT OFF", MyConnection)
Response.Write("ID = " & MyCommand.ExecuteScalar().ToString())
GladhMedlem sedan maj 20012 812 inlägg
#8

select @@identity as identity FROM min_tabell

SELECT @@INDENTITY finns inte i någon tabell, utan är ett Command som går på din session.
Om du bara skriver SELECT @@IDENTITY så kommer den ge dig ID på din Senast insatta post i denna session.

SELECT TOP 1 kan man inte skriva eftersom en annan process kan komma in och skriva in en ny post innan du har hämtat ut ditt ID från din post.

SELECT @@IDENTITY är det enda vettiga sätt att göra det på.

- M

emissionMedlem sedan dec. 19996 721 inlägg
#9

Vill man ha tabellberoende @@IDENTITY så får man använda IDENT_CURRENT('tabellnamn')

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