如何将此存储过程转换为简单查询

本文关键字:简单 查询 转换 存储过程 | 更新日期: 2023-09-27 18:05:31

我写这个存储过程,但我返回所有的sql查询网站代码,我有一个小问题转换这个查询。我在一个表中插入数据,然后用在第一个表中生成的键将其插入到另一个表中。我不知道从站点代码中编写此内容的最佳方法是什么。有三种方法吗?

@m_UserId uniqueidentifier,
@m_WispTypeId int,
@m_CreatedOnDate datetime,
@m_PrivacyTypeId int,
@m_WispText nvarchar(200)
AS
SET XACT_ABORT, NOCOUNT ON
DECLARE @starttrancount int
BEGIN TRY
    SELECT @starttrancount = @@TRANCOUNT
    IF @starttrancount = 0
        BEGIN TRANSACTION
        DECLARE @wispId int
        INSERT INTO dbo.tbl_Wisps
        (UserId,WispTypeId,CreatedOnDate,PrivacyTypeId,WispText)
        VALUES
        (@m_UserId,@m_WispTypeId,@m_CreatedOnDate,@m_PrivacyTypeId,@m_WispText)
        SELECT @wispId = SCOPE_IDENTITY()
        INSERT INTO dbo.tbl_CommentableEntity
        (ItemId)
        VALUES
        (@wispId)
        DECLARE @ceid int
        select @ceid = SCOPE_IDENTITY()
        UPDATE dbo.tbl_Wisps SET CommentableEntityId = @ceid WHERE WispId = @wispId
    IF @starttrancount = 0 
        COMMIT TRANSACTION
END TRY
BEGIN CATCH
    IF XACT_STATE() <> 0 AND @starttrancount = 0 
        ROLLBACK TRANSACTION
    RAISERROR ('Error in adding new wisp', 16, 1)
END CATCH

如何将此存储过程转换为简单查询

有许多使用OUTPUT子句的方法。下面的模式可能适合您:

insert dbo.tbl_CommentableEntity (ItemId)
select wispId from (
    insert dbo.tbl_Wisps (UserId,WispTypeId,CreatedOnDate,PrivacyTypeId,WispText)
    output inserted.wispId
    values (@m_UserId, @m_WispTypeId, @m_CreatedOnDate, @m_PrivacyTypeId, @m_WispText)
) as ins

如果您想在代码中完成它,我会将其分成几个方法,并让保存方法返回标识。然后,您可以创建一个包含所有三个查询的方法,并通过代码模拟存储过程

中的相同逻辑。
public int SaveThis()
{
    return -1 //return identity
}
public int SaveThat(int thisID)
{
    return -2 //return identity
}
public void SaveThisAndThat()
{
    int thisID = this.SaveThis();
    int thatID = this.SaveThat(thisID);
    //so on and so forth    
}