Спасибо за ответы, я хотел что-то с пронумерованными комментариями из-за ссылок в тексте комментариев. Я не хотел давать реакции по именам, иногда один человек реагирует больше раз, поэтому с помощью этой системы я буду знать, на какую систему отвечает человек.
Итак, сегодня я составил этот триггер INSTEAD OF INSERT:
CREATE TRIGGER InsertComments ON Comments
INSTEAD OF INSERT
AS
DECLARE @Inserted TABLE
(
ArticleId INT NOT NULL,
UserId INT NOT NULL,
CommentDate DATETIME NOT NULL,
Content NVARCHAR(1000) NOT NULL,
RowNumber INT NOT NULL
)
INSERT INTO @Inserted
SELECT ArticleId, UserId, CommentDate, Content, ROW_NUMBER() OVER (ORDER BY CommentDate) AS RowNumber
FROM INSERTED
DECLARE @NumberOfRows INT = (SELECT COUNT(*) FROM @Inserted)
DECLARE @i INT = 1
WHILE (@i <= @NumberOfRows)
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
DECLARE @CommentId INT = (SELECT ISNULL(MAX(CommentId), 0)
FROM Comments WHERE ArticleId = (SELECT ArticleId
FROM @Inserted WHERE RowNumber = @i)) + 1
INSERT INTO Comments(CommentId, ArticleId, UserId, CommentDate, Content)
SELECT @CommentId, ArticleId, UserId, CommentDate, Content
FROM @Inserted WHERE RowNumber = @i
COMMIT
SET @i = @i + 1
END
Я знаю, что это не идеальное решение, но оно работает именно так, как мне было нужно. Если у кого-нибудь из вас есть какие-то комментарии, я буду рад их прочитать.