如何将此存储过程转换为简单查询
本文关键字:简单 查询 转换 存储过程 | 更新日期: 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
}