存储过程在后台连续运行

时间:2011-09-17 09:28:54

标签: sql sql-server-2005 stored-procedures

我正在使用一个类文件来更新我的表。因为我要么插入或更新表,每次更新或插入后,我调用一个存储过程来保存表的最后更新ID。但是一旦这个存储过程运行,它就永远不会释放资源。它总是在后台执行。为什么会这样,我怎么能阻止它呢? 这是存储过程: -


Create  procedure [dbo].[Updlastusedkey]
(
@tablename varchar(50)
)
as
Begin
DECLARE @sql varchar(300)
SET @SQL='UPDATE primarykeyTab SET lastKeyUsed = ISNULL(( SELECT Max(ID) from '+@tablename +'),1) WHERE Tablename='''+@tablename +''''
print @SQL
EXEC(@SQL)

END

3 个答案:

答案 0 :(得分:4)

您是否启用了自动提交功能?我认为implicit_transactions = OFF意味着SQL Server中的Auto Commit = ON。如果不是,您的Update操作可能没有为它打开的事务执行COMMIT,从而在表上留下写锁定。或者,也许只是显式地提交您的更新。

答案 1 :(得分:0)

为什么不创建视图?

CREATE VIEW dbo.vPrimaryKeyTab
AS
    SELECT tablename = 'table1', MAX(id_column) FROM table1
    UNION
    SELECT tablename = 'table2', MAX(id_column) FROM table2
    /* ... */
;

现在你不需要更新任何东西或在后台运行任何东西,并且视图总是最新的(它不会是世界上最快的查询,但至少你只需支付当您需要这些信息而不是不断地保持最新信息时,需要花费成本。

答案 2 :(得分:0)

试试这个 -

UPDATE   primarykeyTab   SET  lastKeyUsed = ISNULL(( SELECT Max(ID) from '+@tablename 
+' WITH (NOLOCK)),1) WHERE Tablename='''+@tablename +'''' WITH (NOLOCK)