我正在使用一个类文件来更新我的表。因为我要么插入或更新表,每次更新或插入后,我调用一个存储过程来保存表的最后更新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
答案 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)