簡體   English   中英

帶有表作為輸入的存儲過程事務執行很多次,直到達到事務限制

[英]Stored procedure transaction with table as input executes so many times until it reaches transaction limit

我正在進行交易練習。 我有幾個表,如截圖所示:

圖

我也聲明了自定義數據類型:

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

知道我為什么這么多次執行這個交易?

好吧,我已經想到了這一點,它不得不對Transaction做任何事情,我不小心將exec語句放入了事務中,因此我創建了一個無限循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM