2009-04-13 4 views
0

J'essaie de créer un nouveau rôle sur mon DB d'analyse.Exécution d'une instruction XMLA dans une requête SQL?

J'ai testé la combinaison multiple:
lors de l'exécution d'une simple requête MDX avec Openrowset => cela fonctionne.
lors de l'exécution de l'it fonctionne.
en essayant de créer de nouveau SSAS rôle de l'utilisation relationnelle DB openrowset = SQl> ERREUR.

ici est le code que je suis en train

SELECT * FROM OpenRowset('MSOLAP', 'DATA SOURCE=servername; Initial Catalog=AnalysisDBName;', 
' 
<Create xmlns="http://schemas.microsoft.com/analysisservices/2003/engine"> 
      <ParentObject> 
       <DatabaseID>AnalysisDBName</DatabaseID> 
      </ParentObject> 
      <ObjectDefinition> 
       <Role xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2"> 
        <ID>Role 22</ID> 
        <Name>Rolename</Name> 
       </Role> 
      </ObjectDefinition> 
    </Create> 

') 

et l'erreur que je reçois est:

OLE DB provider "MSOLAP" for linked server "(null)" returned message "A required child element is missing under Envelope/soap:Body at line , column (namespace 'http://schemas.xmlsoap.org/soap/envelope/'). One of Fault, AuthenticateResponse, DiscoverResponse, ExecuteResponse was expected.". 
Msg 7321, Level 16, State 2, Line 2 
An error occurred while preparing the query " 
<Create xmlns="http://schemas.microsoft.com/analysisservices/2003/engine"> 
    <ParentObject> 
     <DatabaseID>AnalysisDBName</DatabaseID> 
    </ParentObject> 
    <ObjectDefinition> 
     <Role xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2"> 
      <ID>Role 22</ID> 
      <Name>Rolename</Name> 
     </Role> 
    </ObjectDefinition> 
</Create> 
" for execution against OLE DB provider "MSOLAP" for linked server "(null)". 

S'il vous plaît aider :)
Cordialement, elie

Répondre

0

OPENROWSET attend une requête valide telle que "SELECT * FROM table" (dans le bon dialecte SQL de la source de données ied)

L'extrait xml n'est pas une requête valide dans la plupart des dialectes SQL, surtout pas T-SQL.

Malheureusement, il n'y CREER pas USER équivalent dans MDX comme T-SQL, donc il ne peut pas être fait par instruction SQL régulière ou OPENROWSET.

Dans le SSAS Granting User Access, il mentionne en utilisant AMO pour gérer les utilisateurs qui ne peuvent pas fait en utilisant OPENROWSET.

Désolé, ce n'est pas une réponse: je ne peux dire comment ne pas le faire ...

1

Vous pouvez ajouter vos ssas olap comme serveur lié puis utilisez ce code:

EXEC ('XMLAsomething .... reste de votre code ') AT LinkedOlap

Questions connexes