You can do a SELECT to get the row id: "SELECT max(id) FROM wherever", BUT you must do it in a transaction to ensure that no other INSERT is performed on that table between your INSERT and SELECT. My recommendation would be to do both in a stored procedure.
Example:
Code:
CREATE PROCEDURE INSERT_Q
@Q varchar(20),
@id int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
INSERT INTO BLAH(Q) VALUES (@Q)
SET @id = (SELECT MAX(id) FROM BLAH)
COMMIT
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
EDIT: After a bit more inspection, for SQL Server 7 (works for 2000 as well), @@IDENTITY returns the last-inserted identity value (look it up in SQL Server Books Online for full details).
So you could do it like this to save a SELECT:
Code:
CREATE PROCEDURE INSERT_Q
@Q varchar(20),
@id int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
INSERT INTO BLAH(Q) VALUES (@Q)
SET @id = @@IDENTITY
COMMIT
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
Bookmarks