返回使用存储过程删除的行数
本文关键字:删除 存储过程 返回 | 更新日期: 2023-09-27 17:57:56
以下是删除过期会话的ASPState存储过程。如果您有自己的服务器,则可以将其配置为自动运行。然而,在共享主机上,你必须在定时间隔上从代码中调用它
ALTER PROCEDURE [dbo].[DeleteExpiredSessions]
AS
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
DECLARE @now datetime
SET @now = GETUTCDATE()
CREATE TABLE #tblExpiredSessions
(
SessionID nvarchar(88) NOT NULL PRIMARY KEY
)
INSERT #tblExpiredSessions (SessionID)
SELECT SessionID
FROM [luckysessions].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
WHERE Expires < @now
IF @@ROWCOUNT <> 0
BEGIN
DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
FOR SELECT SessionID FROM #tblExpiredSessions
DECLARE @SessionID nvarchar(88)
OPEN ExpiredSessionCursor
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM [luckysessions].dbo.ASPStateTempSessions WHERE SessionID = @SessionID AND Expires < @now
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
END
CLOSE ExpiredSessionCursor
DEALLOCATE ExpiredSessionCursor
END
DROP TABLE #tblExpiredSessions
RETURN 0
我通过我的代码如下所示:
SqlConnection con = new SqlConnection("Data Source=xxxxx;Initial Catalog=xxxxx;User ID=xxxxx;Password=xxxx;");
SqlCommand comm = new SqlCommand("DeleteExpiredSessions", con);
comm.CommandType = CommandType.StoredProcedure;
con.Open();
int deleted = comm.ExecuteNonQuery();
con.Close();
问题是,我想知道StoredProcedure删除了多少行,而ExecuteNonQuery将始终返回-1
我不想编辑storedProcedure,但是,如果这是最终的解决方案,那就顺其自然吧。
ALTER PROCEDURE[dbo]。[DeleteExpiredSessions](@deleted int output)作为设置NOCOUNT将死锁优先级设置为低
DECLARE @now datetime SET @now = GETUTCDATE() SET @delted = 0
DELETE FROM[luckysessions].dbo.ASPStateTempSessions WHERE WHERE Expires<现在设置@deleted=@deleted+@@ROWCOUNT。。。
我认为你不需要把光标放在那里。无论哪种方式,最简单的解决方案都是只声明一个变量,每次删除库中任意数量的行或向其添加@ROWCOUNT。删除完成后,您可以选择它、返回它,也可以将它用作存储过程的输出参数。