删除表中的所有记录是否是SQL Server中的错误做法?

ozd*_*per 6 sql-server

我正在将一个系统从VB/Access应用程序移动到SQL服务器.访问数据库中的一个常见问题是使用表来保存正在计算的数据,然后将该数据用于报告.
例如.

delete from treporttable
insert into treporttable (.... this thing and that thing)
Update treportable set x = x * price where (...etc)  
Run Code Online (Sandbox Code Playgroud)

然后从treporttable报告运行

我听说当桌面上的所有记录都被删除时,SQL服务器不喜欢它,因为它创建了大量的日志等.我试过临时sql表但是它们不会持续足够长的时间来报告不同的进程运行和报告.

有许多地方可以在应用程序中对不同的报表进行此操作.报告可以每天运行多次,并在报告表中创建大量记录.

任何人都可以告诉我,如果有最佳做法,或者我的日志信息不正确,这个代码在SQL服务器中会很好.

Joh*_*som 20

如果您不需要记录删除活动,则可以使用truncate table命令.

从在线书籍:

TRUNCATE TABLE在功能上与DELETE语句完全相同,没有WHERE子句:两者都删除表中的所有行.但是TRUNCATE TABLE比DELETE更快并且使用更少的系统和事务日志资源.

http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx

  • 只是选择一个单元格... TRUNCATE在功能上与没有WHERE子句的DELETE功能相同.如果对表有外键,但没有实际行链接到表中的任何行,则DELETE仍将运行,但TRUNCATE TABLE将失败并显示错误. (7认同)

Nat*_*ger 5

delete from sometable
Run Code Online (Sandbox Code Playgroud)

是否允许您回滚更改.因此,如果您的表非常大,那么这可能会导致大量的内存使用和时间.

但是,如果您不担心失败,那么:

truncate sometable
Run Code Online (Sandbox Code Playgroud)

将几乎立即执行,并具有最小的内存要求.但是没有回滚.