Comment supprimer des variables de table dans SQL-Server? Dois-je encore le faire?

J'ai une variable de table dans un script (pas une procédure stockée). Deux questions:

  1. Comment supprimer la variable de table? Drop Table @varName donne une erreur "Incorrect snytax".
  2. devrais-je toujours faire ça? J'entends c'est une bonne pratique. Est-ce vraiment nécessaire pour de petits scripts comme celui-ci?

Voici mon code:

Declare @projectList table(
    name varchar(40) NOT NULL);

Insert Into @projectList
Values ('BCR-00021')

Select *
From @projectList

Drop Table @projectList -- does not work
96
demandé sur jtpereyda 2011-04-13 22:00:52

5 réponses

Les variables de Table sont automatiquement locales et automatiquement supprimées-vous n'avez pas à vous en soucier.

145
répondu Hogan 2011-04-13 18:01:40

Les variables de Table sont comme les variables int ou varchar.

Vous n'avez pas besoin de les laisser tomber. Ils ont les mêmes règles scope que les variables int ou varchar

La portée d'une variable est la plage D'instructions Transact-SQL qui peuvent référencer la variable. La portée d'une variable dure du point où elle est déclarée jusqu'à la fin du lot ou de la procédure stockée dans laquelle elle est déclarée.

28
répondu gbn 2011-04-13 18:04:22

Si quelqu'un d'autre tombe sur ça... et vous avez vraiment besoin de le laisser tomber comme dans une boucle, vous pouvez simplement supprimer tout de la variable de table:

DELETE FROM @tableVariableName
7
répondu Leo Much 2017-08-02 08:28:09

Mais vous avez tous oublié de mentionner que si une table variable est utilisée dans une boucle, elle devra être vidée (delete @table) avant de charger à nouveau les données dans une boucle.

4
répondu Peppe 2017-04-27 21:11:04

Tout comme TempTables, une variable de table locale est également créée dans TempDB. La portée de la variable de table est le lot, la procédure stockée et le bloc d'instruction dans lequel elle est déclarée. Ils peuvent être passés en tant que paramètres entre les procédures. Ils sont automatiquement supprimés lorsque vous fermez la session sur laquelle vous les créez.

3
répondu Gagan 2017-02-22 01:00:00