Comment faire pour supprimer tous les enregistrements dans un tableau déclaré à l'intérieur d'un storedprocedure
Je suis entrain de créer un e-mail file d'attente pour gérer les e-mail de l'envoi. À partir de cette file, je vais prendre un nombre X de dossiers et envoyer des e-mails en fonction du type de champ des enregistrements.
Pour ce que j'ai déclaré un tableau à l'intérieur de la procédure stockée. Lorsque X nombre d'enregistrements sont pris, je suis à la définition du statut de l'enregistrement dans le EmailQ table de traitement. Mais après l'envoi de X nombre de registres, qui est maintenant à l'intérieur du tableau déclaré doit être supprimé.
Pour que je puisse utiliser la Supprimer, mais il y a TRONQUER pour supprimer tous les enregistrements dans le tableau. Mais le tableau déclaré n'a pas identifié comme un Tableau.
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
Quelle est la manière la plus appropriée pour supprimer les enregistrements à partir de ce tableau déclaré.
J'apprécie également les commentaires sur ma façon de gérer l'envoi de mail.
Grâce.
- Est-il MySQL ou SQL Server?
- Avez-vous essayé "DELETE from @Temp" ?
- IL fonctionne Grâce aarghh.... Savez-vous pourquoi cette Tronquer ne fonctionne pas sur ce tableau déclaré.
Vous devez vous connecter pour publier un commentaire.
Vous devriez le faire avec supprimer
Vérifier une question relative à la
SQL Server, tables temporaires avec tronquer vs variable de table avec supprimer
Plus sur Tronquer et les Tables temporaires
TRUNCATE TABLE
Dois-je utiliser une table #temp ou un @variable de table?
Mise à JOUR:
Truncate table ne fonctionne pas déclaré la variable de table. Vous devez utiliser #Temp table à la place ou la suppression de lignes au lieu de trancating. Vérifier liés à la question pour plus d'info.
Mise à JOUR 2:
Grande réponse par Martin Smith
Quelle est la différence entre une table temporaire et variable de table dans SQL Server?
créer un tableau comme ci-dessous..
Utiliser la requête suivante pour supprimer la table temporaire