select @@identity
8 svar · 428 visningar · startad av Arne
SQLCommand cmd=new SQLCommand("SET NOCOUNT ON INSERT INTO .. SELECT @@IDENTITY SET NOCOUNT OFF", dinconnection);
senaste_id = (int)cmd.ExecuteScalar();
Borde kunna funka?
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
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...
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
Vill man ha tabellberoende @@IDENTITY så får man använda IDENT_CURRENT('tabellnamn')