J'ai une table temporaire et je voudrais créer une vue temporaire sur cette table temporaire.
C'est possible?
Dans l'exemple suivant, je voudrais #Top10Records
être une vue au lieu d'une table pour que j'obtienne
select * into #Top10Records from (select top 10 * from #MytempTable)
Malheureusement, SQL Server ne prend pas en charge ceci:
Msg 4103, niveau 15, état 1, ligne 3
"# someView": les vues temporaires ne sont pas autorisées.
Msg 4508, niveau 16, état 1, ligne 6
Les vues ou fonctions ne sont pas autorisées sur les tables temporaires. Les noms de table commençant par "#" désignent des tables temporaires.
Vous pouvez utiliser une expression de table commune pour ce faire:
WITH Top10Records AS
(
select top 10 * from #MytempTable
)
SELECT * FROM Top10Records
GO
SQL Server ne prend pas en charge les vues temporaires en tant que telles et comme indiqué ci-dessus par Daryl, une expression de table commune est probablement la voie à suivre. Cependant, une limitation d'un CTE est qu'il ne peut pas être utilisé sur plusieurs requêtes dans un lot. Vous pouvez cependant créer une vue standard, l'utiliser au besoin puis la déposer simplement à la fin du lot/transaction. (Je sais que la question OP est de savoir si vous pouvez ou non créer une vue temporaire, mais cela peut également potentiellement s'appliquer - cela nécessite un changement de schéma, mais transitoire à toutes fins utiles).