截断与删除和 Table 锁定 SQL Server 2012

Truncate Vs Delete and Table Locks SQL Server 2012

现在我遇到一个存储过程的问题,该存储过程在 运行 时锁定。

它是从 Sybase 转换过来的。

存储过程本来就可以

TRUNCATE TABLE appInfo

然后在同一存储过程中重新填充数据,但在 SQL 服务器中,这似乎导致用户锁定。

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

我尝试的改变是待办事项

BEGIN TRAN
DELETE TABLE appInfo
COMMIT TRAN

然后重新填充数据,但用户在这一项上遇到 NO_DATA_FOUND 错误。

因此,如果我 TRUNCATE 他们获取数据,但会导致锁定

如果我执行删除,则找不到数据。

有人对这种情况和解决方案有任何见解吗?我正在考虑将截断到一个单独的存储过程中,并从父过程中调用,但这可能只是将问题推到一边,并没有真正解决它。

提前致谢

当您截断 table 时,整个 table 被锁定(来自 MSDN https://technet.microsoft.com/en-us/library/ms177570%28v=sql.105%29.aspx - TRUNCATE TABLE 总是锁定table 和页面,但不是每一行。) 当您发出删除 table 它锁定一行,删除它,然后锁定下一行并删除它。您的用户正在继续点击 table。我会选择截断,因为它几乎总是更快。