2010-12-06 5 views
0

J'ai essayé d'exécuter cette procédure stockée destinée à copier le format d'une feuille Excel déjà créée dans une autre feuille Excel; le premier sert de modèle. La procédure stockée est alors destinée à remplir la nouvelle feuille Excel avec le jeu de résultats d'une requête SQL.Importation du jeu de résultats d'une requête à partir de SQL Server 2005 dans MS Excel

Lors de l'exécution, il donne l'erreur suivante:

Insert ExcelSource...[ExcelTable$] (A,B,C) select convert(varchar(200),USER_ID), FIRST_NAME, 
Convert (varchar(20),CREATEDTIME) 
from SERV..AaUser 
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "ExcelSource" returned message "Cannot start your application. The workgroup information file is missing or opened exclusively by another user.". 
Msg 7399, Level 16, State 1, Line 1 
The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "ExcelSource" reported an error. Authentication failed. 
Msg 7303, Level 16, State 1, Line 1 
Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "ExcelSource". 

la syntaxe de la procédure stockée est:

Create proc sp_write2Excel (@fileName varchar(100), 

            @NumOfColumns tinyint, 

            @query  varchar(200)) 

as 

begin 

     declare @dosStmt varchar(200) 

     declare @tsqlStmt varchar(500) 

     declare @colList varchar(200) 

     declare @charInd tinyint 



     set nocount on 



     -- construct the columnList A,B,C ... 

     -- until Num Of columns is reached. 



     set @charInd=0 

     set @colList = 'A' 

     while @charInd < @NumOfColumns - 1 

     begin 

      set @charInd = @charInd + 1 

      set @colList = @colList + ',' + char(65 + @charInd) 

     end 



     -- Create an Empty Excel file as the target file name by copying the template Empty excel File 

     set @dosStmt = ' copy C:\emp\empty.xls ' + @fileName 

     exec master..xp_cmdshell @dosStmt 



     -- Create a "temporary" linked server to that file in order to "Export" Data 

     EXEC sp_addlinkedserver 'ExcelSource', 

     'Jet 4.0', 

     'Microsoft.Jet.OLEDB.4.0', 

     @fileName, 

     NULL, 

     'Excel 5.0' 



     -- construct a T-SQL statement that will actually export the query results 

     -- to the Table in the target linked server 

     set @tsqlStmt = 'Insert ExcelSource...[ExcelTable$] ' + ' (' + @colList + ') '+ @query 



     print @tsqlStmt 



     -- execute dynamically the TSQL statement 

     exec (@tsqlStmt) 



     -- drop the linked server 

     EXEC sp_dropserver 'ExcelSource' 

     set nocount off 

end 

Un grand merci pour votre public et de l'aide prévue.

Cheers, Tunde

Répondre

0

Est-Excel installé sur la même machine que votre instance SQL Server? Il est possible que le pilote Office du pilote JET soit manquant.

Edit:

Je pense que j'ai mal lu le post - il semble que le fichier est déjà ouvert. Les fichiers Excel ne peuvent être ouverts que par un utilisateur à la fois, et SQL Server requiert un accès exclusif à ce fichier. L'utilisation de LockHunter peut aider à déterminer ce qui lie le fichier.

+0

Oui, ils sont tous deux installés sur la même machine. Merci et je suis connecté en tant que sa sur le SERVER SQl et administrateur sur la machine. – Tunde

Questions connexes