#sql #transactions
#sql #транзакции
Вопрос:
Я работаю над выполнением транзакции. У меня есть несколько таблиц, как показано на скриншоте здесь:
Также у меня объявлен пользовательский тип данных:
create type TagList as table
(
TagName varchar(255)
)
Теперь я просто попытался передать эту таблицу в качестве переменной в мою хранимую процедуру, чтобы проверить, работает ли она, однако, когда я выполняю следующую транзакцию, она выполняется столько раз, пока не достигнет предела транзакции
ALTER PROCEDURE NewBlogPost
@headline VARCHAR(255),
@content VARCHAR(MAX),
@userId INT,
@categoryId INT,
@tagId INT,
@tags AS dbo.TagList READONLY
AS
BEGIN TRY
BEGIN TRANSACTION
DECLARE @postId INT
SELECT @postId = (SELECT TOP 1 PostId
FROM Posts
ORDER BY PostId DESC) 1;
INSERT INTO Posts (PostId, Headline, Content, UserId, CategoryId, StateId, PostedDate, LastEdit)
VALUES (@postId, @headline, @content, @userId, @categoryId, 1, GETDATE(), GETDATE())
INSERT INTO TagPost (PostId, TagId)
VALUES (@postId, @tagId)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
ROLLBACK TRANSACTION
END CATCH
DECLARE @TagTable TagList
INSERT INTO @TagTable(TagName)
VALUES ('Computers'), ('MobilePhones'), ('Pesos')
EXEC NewBlogPost @headline = 'Framework called VUE breaks new record', @content = 'New framework had broken world record in daily download', @userId = 1, @categoryId = 1, @tagId = 1, @tags = @TagTable
Есть идеи, почему я выполняю эту транзакцию так много раз?
Комментарии:
1. Какую СУБД вы используете? (Этот код зависит от продукта.)
2. DataGrip, но я получил те же результаты, выполнив это в MSSQL Studio
Ответ №1:
Хорошо, я понял это, это не имеет никакого отношения к транзакции, я случайно вставил инструкцию exec в транзакцию, поэтому я создал бесконечный цикл.