Я создаю очередь электронной почты для обработки отправки электронной почты. Из этой очереди я беру 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
Каков наиболее подходящий способ удаления записей из этой объявленной таблицы. Я также ценю комментарии о моем способе обработки отправки почты.
Спасибо.