En utilisant openrowset pour lire un fichier Excel dans une table temporaire; comment puis-je référence à cette table?

StackOverflow https://stackoverflow.com/questions/863735

Question

Je suis en train d'écrire une procédure stockée qui va lire un fichier Excel dans une table temporaire, puis masser certaines des données dans ce tableau, puis insérez les lignes sélectionnées de cette table dans une table permanente.

Alors, il commence comme ceci:

SET @SQL = "select * into #mytemptable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database="+@file+";HDR=YES', 'SELECT * FROM [Sheet1$]')"

EXEC (@SQL)

Ce bien semble fonctionner.

Cependant, si je puis essayer quelque chose comme ceci:

Select * from #mytemptable

Je reçois une erreur:

Nom d'objet incorrect '#mytemptable'

Pourquoi #mytemptable pas reconnu? Est-il possible d'avoir #mytemptable accessible au reste de la procédure stockée?

Un grand merci à l'avance!

Était-ce utile?

La solution

Je n'ai pas le temps de se moquer de tout ça, donc je ne sais pas si ça va marcher, mais essayez d'appeler votre table « ## mytemptable » au lieu de « #mytemptable »

Je devine que votre problème est que votre table n'est pas portée plus après avoir exec () la chaîne SQL. tables temporaires précédés de deux symboles de livre sont globalement accessibles.

Ne pas oublier de laisser tomber quand vous avez fini avec elle!

Autres conseils

La façon dont je l'ai fait dans le passé était de: Tout d'abord, créez le #temp_table à l'aide CREATE TABLE. En second lieu, construire la requête dynamique qu'insérer habituelle dans le #temp_table Troisièmement, utiliser exec sp_executesql @sql.

Avec cette méthode, vous aurez pas besoin de la portée globale ## temporary_table.

Vous pouvez l'utiliser dans la même portée, y compris le script entier dans la requête dynamique:

DECLARE @strSQL nvarchar(max)
DECLARE @file varchar(100)

SET @file='c:\myfile.xls'
SET @strSQL=N'SELECT * INTO #mytemptable FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;Database='+@file+';HDR=YES'', ''SELECT * FROM [Sheet1$]'');'
SET @strSQL=@strSQL+N'SELECT * FROM #mytemptable'

EXECUTE sp_executesql @strSQL
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top