如何删除存储过程中声明的表中的所有记录

时间:2012-08-30 05:55:53

标签: sql sql-server sql-server-2008-r2 temp-tables

我正在创建一个电子邮件队列来处理电子邮件发送。在那个队列中,我正在记录X个记录,并根据记录的类型字段发送电子邮件。

为此,我在存储过程中声明了一个表。当我记录X个记录时,我将 EmailQ表中记录的状态设置为处理。但是在发送 X条记录后,必须删除现在在已声明的表格内的

为此,我可以使用Delete,但是 TRUNCATE删除表中的所有记录。但声明的表格未标识为表格。

WHILE EXISTS ( SELECT * FROM emailQ WHERE Status != 3)
BEGIN
  CREATE PROCEDURE [dbo].[SendMails]
  DECLARE @Temp TABLE (......)
  --Declare all the necessary variables

  INSERT INTO @Temp SELECT TOP 10
  WITH (UPDLOCK, HOLDLOCK)

  --Update the email queue table status of selected set of records in to the @Temp

  DECLARE  dataSet CURSOR FORWARD_ONLY FOR (SELECT.......  FROM @Temp)
  OPEN dataSet
  FETCH NEXT FROM dataSet INTO...

  WHILE @@FETCH_STATUS = 0
  BEGIN
    --send mails acordingly
  END

  CLOSE dataSet
  DEALLOCATE dataSet

  --Update the email queue table status of completed set of records in to the @Temp

  WAITFOR DELAY...
  TRUNCATE @Temp// This is where this Temp table is not identified as a table(It says     "Incorrect sintax... Expecting a table")

 END

从此声明的表中删除记录的最合适方法是什么。 我也很感谢我对处理邮件发送方式的评论。

感谢。

2 个答案:

答案 0 :(得分:8)

你应该用删除

来做
DELETE FROM @Temp

检查相关问题

SQL Server, temporary tables with truncate vs table variable with delete

有关截断和临时表的更多信息

TRUNCATE TABLE

Should I use a #temp table or a @table variable?

<强>更新

截断表不适用于声明的表变量。您应该使用#Temp表或删除行而不是trancating。查看相关问题以获取更多信息。

更新2:

马丁史密斯的精彩回答

What's the difference between a temp table and table variable in SQL Server?

答案 1 :(得分:0)

创建表格如下..

DECLARE @tempTable table(BatchId int, BatchInputOutputType NVARCHAR(128));

使用以下查询删除临时表

DELETE from @tempTable;