メール送信を処理するメール キューを作成しています。そのキューから 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
この宣言されたテーブルからレコードを削除する最も適切な方法は何ですか? また、メール送信の処理方法に関するコメントもありがとうございます。
ありがとう。