コメントのテキストで参照しているため、番号付きのコメントが必要でした。名前でリアクションしたくありませんでした。一人の人が何度もリアクションすることもあるので、このシステムでは、その人が誰にリアクションしているかを知ることができます。
だから今日、私はこの 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
これが完璧な解決策ではないことはわかっていますが、必要に応じて正確に機能します。どなたかコメントがあれば、喜んで読ませていただきます。