Как удалить все записи в объявленной таблице внутри хранимой процедуры

Я создаю очередь электронной почты для обработки отправки электронной почты. Из этой очереди я беру X записей и отправляю электронные письма в соответствии с полем типа записей.

Для этого я объявил таблицу внутри хранимой процедуры. Когда берется X записей, я устанавливаю статус записи в таблице EmailQ на обработку. Но после отправки X записей, которые сейчас находятся внутри объявленной таблицы, необходимо удалить.

Для этого я могу использовать Удалить, но есть 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

Каков наиболее подходящий способ удаления записей из этой объявленной таблицы. Я также ценю комментарии о моем способе обработки отправки почты.

Спасибо.


person diyoda_    schedule 30.08.2012    source источник
comment
Вы пробовали УДАЛИТЬ ИЗ @Temp?   -  person hgulyan    schedule 30.08.2012
comment
ЭТО работает Спасибо aarghh.... Вы знаете, почему этот Truncate не работает на этой объявленной таблице.   -  person diyoda_    schedule 30.08.2012


Ответы (2)


Вы должны сделать это с помощью удаления

DELETE FROM @Temp

Проверьте связанный вопрос

SQL Server, временные таблицы с усеченной и табличной переменной с удалением

Подробнее об усеченных и временных таблицах

TRUNCATE TABLE

Должен ли я использовать таблицу #temp или переменную @table?

ОБНОВЛЕНИЕ:

Усеченная таблица не будет работать с объявленной табличной переменной. Вместо этого вы должны использовать таблицу #Temp или удалять строки вместо усечения. Проверьте связанный вопрос для получения дополнительной информации.

ОБНОВЛЕНИЕ 2:

Отличный ответ Мартина Смита

В чем разница между временной таблицей и табличной переменной в SQL Server?

person hgulyan    schedule 30.08.2012
comment
О, мой плохой, мне действительно нужно проверить зрение. (невнимательность) Большое спасибо, hgulyan - person diyoda_; 30.08.2012
comment
Это работает? TRUNCATE TABLE @Temp показывает мне неправильный синтаксис - person András Ottó; 30.08.2012
comment
Вы правы, это не работает. Я думаю, что он сделал это с помощью delete . - person hgulyan; 30.08.2012

создайте таблицу, как показано ниже.

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

Используйте следующий запрос для удаления временной таблицы

DELETE from @tempTable;
person Dinesh Vaitage    schedule 25.03.2016