J'ai une variable de table dans un script (pas une procédure stockée). Deux questions:
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
Les variables de table sont automatiquement locales et automatiquement supprimées - vous n'avez pas à vous en préoccuper.
Les variables de table ressemblent aux variables int ou varchar.
Vous n'avez pas besoin de les laisser tomber. Ils ont les mêmes règles portée que les variables int ou varchar
La portée d'une variable correspond à la plage d'instructions Transact-SQL pouvant faire référence à la variable. La portée d'une variable dure à partir du moment 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.
si quelqu'un d'autre rencontre cela ... et que vous avez vraiment besoin de le supprimer comme dans une boucle, vous pouvez simplement supprimer tout de la variable de table:
DELETE FROM @tableVariableName
Mais vous avez tous oublié de mentionner que si une table de variables est utilisée dans une boucle, elle devra être vidée (delete @table) avant de charger à nouveau les données dans une boucle.
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'instructions dans lequel elle est déclarée. Ils peuvent être transmis en tant que paramètres entre procédures. Ils sont automatiquement supprimés lorsque vous fermez la session sur laquelle vous les créez.
Voici une solution
Declare @tablename varchar(20)
DECLARE @SQL NVARCHAR(MAX)
SET @tablename = '_RJ_TEMPOV4'
SET @SQL = 'DROP TABLE dbo.' + QUOTENAME(@tablename) + '';
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@tablename) AND type in (N'U'))
EXEC sp_executesql @SQL;
Fonctionne bien sur SQL Server 2014 Christophe