Учитывая, что таблица форума и многие пользователи одновременно вставляют в нее сообщения, насколько безопасна эта транзакция?
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
DECLARE @LastMessageId SMALLINT
SELECT @LastMessageId = MAX(MessageId)
FROM Discussions
WHERE ForumId = @ForumId AND DiscussionId = @DiscussionId
INSERT INTO Discussions
(ForumId, DiscussionId, MessageId, ParentId, MessageSubject, MessageBody)
VALUES
(@ForumId, @DiscussionId, @LastMessageId + 1, @ParentId, @MessageSubject, @MessageBody)
IF @@ERROR = 0
BEGIN
COMMIT TRANSACTION
RETURN 0
END
ROLLBACK TRANSACTION
RETURN 1
Здесь я читаю последний MessageId и увеличиваю его.Я не могу использовать поле Identity, потому что его нужно увеличивать для каждого сообщения, вставленного в группу (не для каждого сообщения, вставляемого в таблицу).