It's always a good idea to save error and rowcount into local variables after each statement that affects data.CREATE PROCEDURE dbo.db_InsertQuestion @msg varchar(250), @Uid int, @ViewId int, @ChatRoomID int ASSET NOCOUNT ONDECLARE @err int ; SET @err = 0DECLARE @cnt int ; SET @cnt = 0BEGIN TRANSACTION INSERT INTO dbo.Questions (msg, Uid, ViewId) VALUES (@msg, @Uid, @ViewId) SELECT @err=@@ERROR,@cnt=@@ROWCOUNT IF @err<>0 OR @cnt=0 BEGIN RAISERROR('Insert failed',16,1) ROLLBACK TRANSACTION RETURN 1 END -- update user's message count UPDATE Chatters SET lastAction = getdate(), sendMessages = (sendMessages+1) FROM Chatters WHERE id = @Uid AND Chatid = @ChatRoomID SELECT @err=@@ERROR,@cnt=@@ROWCOUNT IF @err<>0 OR @cnt=0 BEGIN RAISERROR('Update failed',16,1) ROLLBACK TRANSACTION RETURN 1 ENDCOMMIT TRANSACTIONRETURNHTHJasper Smith