Sql server 截断Vs删除和表锁定SQL Server 2012

Sql server 截断Vs删除和表锁定SQL Server 2012,sql-server,stored-procedures,truncate,Sql Server,Stored Procedures,Truncate,现在我遇到了一个存储过程在运行时被锁定的问题 这是Sybase的转换 存储过程本来可以 TRUNCATE TABLE appInfo 然后在同一存储过程中重新填充数据,但在SQL Server中,这似乎会导致用户被锁定 它不是一个高流量的数据库 我试着做的改变是最好的 BEGIN TRAN DELETE TABLE appInfo COMMIT TRAN 然后重新填充数据,但是用户在这一个上得到一个NO\u data\u FOUND错误 因此,如果我TRUNCATE,他们会得到数据,但会导致

现在我遇到了一个存储过程在运行时被锁定的问题

这是Sybase的转换

存储过程本来可以

TRUNCATE TABLE appInfo
然后在同一存储过程中重新填充数据,但在SQL Server中,这似乎会导致用户被锁定

它不是一个高流量的数据库

我试着做的改变是最好的

BEGIN TRAN
DELETE TABLE appInfo
COMMIT TRAN
然后重新填充数据,但是用户在这一个上得到一个
NO\u data\u FOUND
错误

因此,如果我
TRUNCATE
,他们会得到数据,但会导致锁

如果执行删除操作,则找不到任何数据

有人对这种情况有什么见解和解决方案吗?我曾考虑将truncate取出到一个单独的存储过程中,并从父过程中调用,但这可能只是将问题推向前进,而不是真正解决它


提前感谢

当您截断一个表时,整个表被锁定(从MSDN-truncate table始终锁定表和页,但不是每一行。)当您发出删除表时,它锁定一行,删除它,然后锁定下一行并删除它。你的用户正在不断地攻击桌面。我会选择truncate,因为它几乎总是更快

是否因为要重置标识而使用Truncate?“删除[表格]”也意味着“从[表格]中删除*”?