SQL Server affiche “nom d'objet non Valide '#temp'” lorsque vous travaillez avec une table temporaire
J'ai créé une procédure
create procedure testProcedure_One
as
DECLARE @Query nvarchar(4000)
begin
SET @Query = 'SELECT * into #temptest FROM Table1'
Exec sp_Executesql @query
SELECT * FROM #temptest
drop table #temptest
end
Quand je lance la procédure testProcedure_One
j'obtiens le message d'erreur:
Invalid object name '#temp'
Mais si j'utilise ##temp means
cela fonctionne:
create procedure testProcedure_two
as
DECLARE @Query nvarchar(4000)
begin
SET @Query = 'SELECT * into ##temptest FROM Table1'
Exec sp_Executesql @query
SELECT * FROM ##temptest
drop table ##temptest
end
testProcedure_two
fonctionne bien
Quel pourrait être le problème? Comment puis-je le résoudre?
OriginalL'auteur Jebli | 2009-08-12
Vous devez vous connecter pour publier un commentaire.
Sans doute vous avez des code suivant qui permet de sélectionner à partir de #temp, vous donnant l'erreur?
Il est à portée. ##temp est une table temporaire globale, disponibles dans d'autres sessions. #temp est "local" table temporaire, uniquement accessible par le courant de l'exécution de la portée. sp_executesql s'exécute sous un champ d'application différent, et donc, il va insérer les données dans #temp, mais si vous essayez d'accéder à la table à l'extérieur de l'appel sp_executesql, il ne la trouvera pas.
par exemple
Cette erreur de n ° de Test est créé et visible uniquement à la sp_executesql contexte:
Les travaux ci-dessus ##Test car il crée une table temporaire globale.
Cela fonctionne, comme le SELECT est une partie de la même portée.
Mes questions seraient:
OriginalL'auteur AdaTheDev
pour vous d'exécuter, je pense que le #tmp_table doit d'abord être créé à l'aide d'une instruction ddl.
Puis vous exécutez votre exec et la procédure stockée que vous avez créé dans l'exec doit avoir le même nom
temp table viz.#tmp_table
.OriginalL'auteur mahesh
Créer une table Temporaire à l'aide de CREATE TABLE et ensuite utiliser INSÉRER DANS pour insérer les valeurs, au lieu de SÉLECTIONNER DANS.
Ce corrigé le problème pour moi.
OriginalL'auteur Bhoopathi Reddy