两个相关问题:我有一张在生产或现场环境中使用的表格。是否适当且可能在该表上开始事务以确保在删除并重新生成然后提交或回滚该表时,没有人正在使用该表,以便现场用户不会注意到?删除行然后重新填充行可能更好。问题的第二部分是我将如何在transact语句中执行此删除或删除行,还是应该在临时数据库表上执行此操作?
感谢。
答案 0 :(得分:1)
1)更新时锁定所有表格可以使用表格提示(参见http://msdn.microsoft.com/en-us/library/ms187373%28v=SQL.100%29.aspx),例如
USE AdventureWorks;
GO
UPDATE Production.Product
WITH (TABLOCK)
SET ListPrice = ListPrice * 1.10
WHERE ProductNumber LIKE 'BK-%';
GO
2)要删除表中的所有行,需要使用TRUNCATE TABLE。 AS BOL说,TRUNCATE TABLE总是锁定表和页面,但不是每行。 因此,如果某人锁定了此表中的一条记录,则无法锁定此表并且TRUNCATE无法启动。