IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[SQLEXP2005] [TSQL] fonction OpenRowset


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut [SQLEXP2005] [TSQL] fonction OpenRowset
    Bonjour,

    Je souhaite utiliser OpenRowset, avec une chaine de connexion OleDB. Mais ... je n'y arrive pas.

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM OPENROWSET(
              	'sqloledb', 
                    'MONSERVEUR';'sa';'pwd',
                    'SELECT * FROM MABASE.dbo.MATABLE'
    Ca marche, et je suis bien en OleDB, mais je n'utilise pas de chaine de connexion : je passe directement en paramètre le nom du serveur, le login, et je dois préfixer le nom de ma table pour indiquer la base que j'attaque.

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM OPENROWSET (
              	'MSDASQL', 
                  	'DRIVER=SQL Server;SERVER=MONSERVEUR;
                     UID=sa;PWD=pwd;DATABASE=MABASE',
                    'SELECT * FROM MATABLE')
    Ca marche aussi, j'utilise bien une chaine de connexion, je n'ai pas besoin de préfixer le nom de ma table (puisque la chaine de connexion contient déjà le nom de la base à attaquer), mais ... il s'agit d'une chaine de connexion ODBC, si je ne m'abuse.

    Or moi, j'ai à ma disposition une chaine de connexion OleDB, du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Provider=SQLOLEDB.1;
    Persist Security Info=True;
    User ID=sa;
    Password=pwd;
    Initial Catalog=MABASE;
    Data Source=MONSERVEUR
    Je souhaiterais donc pouvoir faire une requête comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * FROM OPENROWSET(
                     'sqloledb', 
                     'Provider=SQLOLEDB.1;
    		 Password=pwd;
    		 Persist Security Info=True;
    		 User ID=sa;
    		 Initial Catalog=MABASE;
    		 Data Source=MONSERVEUR',
                    'SELECT * FROM MATABLE')
    Mais je me fais jeter, avec les messages suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    OLE DB provider "SQLNCLI" for linked server "(null)" returned message "Invalid authorization specification".
    OLE DB provider "SQLNCLI" for linked server "(null)" returned message "Invalid connection string attribute".
    Msg 7399, Level 16, State 1, Line 12
    The OLE DB provider "SQLNCLI" for linked server "(null)" reported an error. Authentication failed.
    Msg 7303, Level 16, State 1, Line 12
    Cannot initialize the data source object of OLE DB provider "SQLNCLI" for linked server "(null)".
    J'imagine que je m'y prends mal avec OpenRowset, mais là je sèche. Si quelqu'un peut m'éclairer, je suis preneur !

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Salut,

    j'ai pas la version 2005 de SQL sever, mais en mssql2000, il ne faut que 5 paramètres à OPENROWSET. Les erreurs qui te sont remontées, semblent indiquer aussi que tu as des paramétres en trop.

    Que tu dis l'aide sur OPENROWSET dans mssql2005 ?
    De plus, les noms de paramètres sont importants pour OLEDB je pense. Donc UID c'est pas User ID, PWD c'est pas password. Ceci à vérifier j'en suis pas sur...

    Bref je pense qu'il faut transformer la chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'sqloledb', 
                     'Provider=SQLOLEDB.1;
    		 Password=pwd;
    		 Persist Security Info=True;
    		 User ID=sa;
    		 Initial Catalog=MABASE;
    		 Data Source=MONSERVEUR',
                    'SELECT * FROM MATABLE'
    pour qu'elle devienne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'sqloledb', 
                    'MONSERVEUR';'sa';'pwd',
                    'SELECT * FROM MABASE.dbo.MATABLE'
    qui marche.

    Je précise que je suis pas expert en OPENROWSET, donc si qq'un d'autre à une idée

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Salut,

    Sauf erreur, ce que tu proposes correspond à l'une des choses que j'ai testées et mentionnées dans mon premier post. OpenRowset est utilisable de deux façons : soit en fournissant une chaine de connexion, soit en indiquant en paramètre le nom du serveur, le login & le mot de passe. Effectivement, cette dernière méthode marche, mais je souhaite pouvoir utiliser directement ma chaine de connexion OleDB.

    Ca marche dans le cas d'une chaine de connexion ODBC, mais pas avec une chaine de connexion OleDB : j'aimerais comprendre pourquoi...

    Merci pour ta réponse, en tout cas.

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Apparemment OPENROWSET utilise une chaîne de connexion de style ODBC, même si la connexion se fait finalement en OLEDB... probablement les joies du client natif SQL.
    Doc ici : http://msdn2.microsoft.com/en-us/library/ms130822.aspx

    Tu as OPENDATASOURCE() qui a l'air de prendre des chaînes de connexion en syntaxe OLEDB. A placer à la place d'un nom de serveur lié dans la requête (selon aide en ligne, jamais encore essayé personnellement).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 122
    Points : 81
    Points
    81
    Par défaut
    Ok, donc impossible d'utiliser directement une chaine de connexion OleDB avec OpenRowset... Tant pis pour moi

    Merci pour l'info !

Discussions similaires

  1. TSQL Fonction temporaire
    Par jo_dalton dans le forum Développement
    Réponses: 5
    Dernier message: 26/11/2009, 13h47
  2. [SQLEXP2005][TSQL]Procédures avec Paramètres optionnels
    Par hsii04 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/03/2008, 10h50
  3. [SQL2005][TSQL] Problème de curseur / Fonction ne "compile" pas
    Par Ivenoproblemwiththat dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/06/2007, 21h55
  4. [SQLServer2k][sql] fonction replace() en TSQL
    Par Tops dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/03/2007, 14h26
  5. [TSQL] Optimisation fonction levenshtein
    Par Adi81 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/03/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo