Changer votre dernière déclaration à ceci:
EXEC('SELECT * FROM ' + @tablename)
Voilà comment je fais le mien dans une procédure stockée. Le premier bloc déclare la variable et définit le nom de la table en fonction de l'année en cours et du nom du mois, dans ce cas TEST_2012OCTOBER. Je vérifie alors si elle existe déjà dans la base de données, et supprime si c'est le cas. Ensuite, le bloc suivant utilisera une instruction SELECT INTO pour créer la table et la remplir avec les enregistrements d'une autre table avec des paramètres.
--DECLARE TABLE NAME VARIABLE DYNAMICALLY
DECLARE @table_name varchar(max)
SET @table_name =
(SELECT 'TEST_'
+ DATENAME(YEAR,GETDATE())
+ UPPER(DATENAME(MONTH,GETDATE())))
--DROP THE TABLE IF IT ALREADY EXISTS
IF EXISTS(SELECT name
FROM sysobjects
WHERE name = @table_name AND xtype = 'U')
BEGIN
EXEC('drop table ' + @table_name)
END
--CREATES TABLE FROM DYNAMIC VARIABLE AND INSERTS ROWS FROM ANOTHER TABLE
EXEC('SELECT * INTO ' + @table_name + ' FROM dbo.MASTER WHERE STATUS_CD = ''A''')
QUOTENAME est important pour la sécurité. Merci. –
Mais comment retourner une valeur à partir d'une telle requête? Par exemple. 'COUNT (*)'? – Suncatcher