The behavior is the same with a stored proc
CREATE TABLE test (ID INT NOT NULL, Val INT);
GO
INSERT INTO test VALUES (1,1), (2,2), (3,3);
GO
CREATE PROCEDURE trg_test_upd
AS
UPDATE test SET val = 3 WHERE id = 1
RAISERROR('Error', 16, 1);
GO
SELECT * FROM test
BEGIN TRAN
EXEC trg_test_upd
COMMIT TRAN
SELECT * FROM test