J'essaie d'écrire une procédure stockée qui va lire un fichier Excel dans une table temporaire, puis masser certaines des données de cette table, puis insérer les lignes sélectionnées de cette table dans une table permanente.Utilisation de openrowset pour lire un fichier Excel dans une table temporaire; comment puis-je référencer cette table?
Ainsi, il commence comme ceci:
SET @SQL = "select * into #mytemptable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database="[email protected]+";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 ? Existe-t-il un moyen d'avoir #mytemptable accessible au reste de la procédure stockée?
Un grand merci d'avance!
Lunchy - cela fonctionne parfaitement - merci beaucoup! Cependant, que se passera-t-il si deux ou plusieurs utilisateurs exécutent le proc stocké en même temps? Est-ce que le fait que ## mytemptable a une portée globale cause des problèmes? Ou SQL Server crée-t-il des instances distinctes, même si les tables temporaires portent le même nom? – mattstuehler
Oui, ils vont s'affronter, alors vous devrez trouver un moyen d'éviter cela, et malheureusement, je n'ai pas beaucoup de bons conseils sur la façon de le faire. Je comprends que vous avez besoin de exec() cette chaîne parce que vous concatenez le nom de fichier dans la requête, mais est-ce vraiment nécessaire? Si vous pouvez l'éviter, ce n'est pas un problème car vous pouvez exécuter la requête sans exec() et revenir à l'utilisation d'une table temporaire de portée locale. Dans mon expérience, exec() ing conduit toujours à la douleur à un moment donné. :) –
Lunchy - merci encore. Malheureusement, je ne sais pas comment contourner exec(), car le nom du fichier sera toujours différent. L'utilisation d'une table temporaire à portée globale est également interdite, car il est possible que plusieurs utilisateurs appellent ce proc stocké en même temps. J'ai également envisagé d'utiliser une variable de table au lieu d'une table temporaire, mais je ne veux pas définir la structure de la table à l'avance - je veux que cela soit dynamique et provienne de la feuille de calcul Excel. Donc, retour à la case 1, je suppose ... – mattstuehler