2015-10-08 1 views
0

Je dois créer une procédure stockée qui obtient un chemin en tant que paramètre et qui insère le fichier dans la table via la commande OPENROWSET.L'utilisation de SQL dynamique dans openrowset produit une erreur

après beaucoup de recherche et d'essai, j'ai appris que OPENROWSET ne prend pas en charge les paramètres et doit donc être «trompé» avec SQL dynamique.

C'est la partie qui ne fonctionne pas, cela me montre une erreur étrange.

Cela peut être dû au OPENROWSET n'acceptant pas le paramètre de chaîne mais - j'ai vu de nombreux extraits de code construits de la même façon et les utilisateurs disent qu'ils fonctionnent.

S'il vous plaît aidez-moi à comprendre ce qui me manque ici et comment puis-je faire ce travail?

Merci!

Voici mon code:

Declare @string varchar(MAX) = 'C:\Users\akoga_000\Desktop\test1.xlsx' 
DECLARE @sqlString AS varchar(MAX)= 

'insert into gameIt_DBSummer.dbo.tblUser 
select * from openrowset(
''Microsoft.ACE.OLEDB.12.0'', 
''EXCEL 12.0;DataBase='' 
'+cast(@string as varchar(max))+' 
'';Extended Properties="EXCEL 12.0 Xml;HDR=YES'', 
''SELECT * FROM [Sheet1$]'' 
)'; 

EXEC (@sqlString) 

// J'ai essayé aussi avec EXEC sp_executesql et une variable nvarchar entre autres options

Voici l'erreur:

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near 'C:'.

Merci!

Répondre

0

Je pense que vous obtenez cette erreur car vous avez besoin d'un double caractère supplémentaire entourant le chemin (variable @string). Essayez ceci:

Declare @string varchar(MAX) = 'C:\Users\akoga_000\Desktop\test1.xlsx' 
DECLARE @sqlString AS varchar(MAX)= 
'insert into gameIt_DBSummer.dbo.tblUser 
select * from openrowset(
''Microsoft.ACE.OLEDB.12.0'', 
''EXCEL 12.0;DataBase='''' 
'[email protected]+' 
'''';Extended Properties="EXCEL 12.0 Xml;HDR=YES'', 
''SELECT * FROM [Sheet1$]'' 
)'; 
select @sqlString 
+0

Merci d'avoir répondu! J'ai fait comme tu l'as suggéré. Il a résolu l'erreur de syntaxe MAIS maintenant je reçois une autre erreur: le fournisseur OLE DB "Microsoft.ACE.OLEDB.12.0" pour le serveur lié "(null)" a retourné le message "Impossible de mettre à jour la base de données ou l'objet est en lecture seule ". Msg 7303, niveau 16, état 1, ligne 1 Impossible d'initialiser l'objet de source de données du fournisseur OLE DB "Microsoft.ACE.OLEDB.12.0" pour le serveur lié "(null)". Le fichier et la base de données ne sont pas en lecture seule .... Des idées? Merci! –

+0

Jetez un coup d'oeil à ceci: [link] http://stackoverflow.com/questions/26267224/the-ole-db-provider-microsoft-ace-oledb-12-0-for-linked-server-null –