2016-04-06 17 views
0

dbo.USR_YALE_IMODULES_EMAIL_WEBSERVICE_LOGという名前のテーブルのresponseというxml列に、次のxmlがあります。エラーとメッセージ要素の属性コードと説明を正しく取得できません。誰でも私が間違っていることを説明できますか?私は1727行のエラーがあり、それよりはるかに少ないです。私はおもしろいです内部要素属性を取得するためのXquery

select response.query('declare namespace Error="http://imodules.com/WebServices/EmailCategoryQuery/Error";/Error:EmailCategoryUpdateResults/EmailCategoryUpdateMemberResult/Error[@Code[1]]') as result 
FROM dbo.USR_YALE_IMODULES_EMAIL_WEBSERVICE_LOG 

これはちょうど空白を返します。

ありがとうございます。

/* XMLサンプル

<EmailCategoryUpdateResults xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <EmailCategoryUpdateMemberResult xmlns="http://imodules.com/WebServices/EmailCategoryQuery/" Community_Id="2" Success="true" Constituent_Id="105933" Column="Email_Category_Omit_for_Travel_Program"> 
    <Message Code="2207" Description="The column 105933 already contains the specified update value." /> 
    </EmailCategoryUpdateMemberResult> 
    <EmailCategoryUpdateMemberResult xmlns="http://imodules.com/WebServices/EmailCategoryQuery/" Community_Id="2" Success="false" Constituent_Id="105939" Column="Email_Category_Do_Not_Email"> 
    <Error Code="2500" Description="Could not find column Email_Category_Do_Not_Email." /> 
    </EmailCategoryUpdateMemberResult> 
    <EmailCategoryUpdateMemberResult xmlns="http://imodules.com/WebServices/EmailCategoryQuery/" Community_Id="2" Success="true" Constituent_Id="105939" Column="Email_Category_Omit_AYA_Email"> 
    <Message Code= "2207" Description="The column 105939 already contains the specified update value." /> 
    </EmailCategoryUpdateMemberResult> 
    <EmailCategoryUpdateMemberResult xmlns="http://imodules.com/WebServices/EmailCategoryQuery/" Community_Id="2" Success="true" Constituent_Id="105939" Column="Email_Category_Omit_for_Travel_Program"> 
    <Message Code="2207" Description="The column 105939 already contains the specified update value." /> 
    </EmailCategoryUpdateMemberResult> 
    <EmailCategoryUpdateMemberResult xmlns="http://imodules.com/WebServices/EmailCategoryQuery/" Community_Id="2" Success="true" Constituent_Id="106016" Column="Email_Category_Omit_Travel_Email"> 
    <Message Code="2207" Description="The column 106016 already contains the specified update value." /> 
    </EmailCategoryUpdateMemberResult> 
    <EmailCategoryUpdateMemberResult xmlns="http://imodules.com/WebServices/EmailCategoryQuery/" Community_Id="2" Success="true" Constituent_Id="106016" Column="Email_Category_Omit_Travel_Email"> 
    </EmailCategoryUpdateMemberResult> 
</EmailCategoryUpdateResults> 

*/

/* 
create some temp tables 
*/ 
If Object_Id('tempdb..#xml_transaction') IS NOT NULL BEGIN DROP TABLE #xml_transaction END; 
If Object_Id('tempdb..#xml_message') IS NOT NULL BEGIN DROP TABLE #xml_message END; 
If Object_Id('tempdb..#xml_error') IS NOT NULL BEGIN DROP TABLE #xml_error END; 

create table #xml_transaction (
    TRANSACTIONID uniqueidentifier, 
    LOOKUPID nvarchar(10), 
    TRANSFERDATE nvarchar(25), 
    CATEGORY nvarchar(155), 
    LASTUPDATED nvarchar(25), 
    COMMUNITYID nvarchar(1), 
    OPTIN nvarchar(10), 
    SUCCESS nvarchar(10)    
) 

create table #xml_message (
    MESSAGEID uniqueidentifier, 
    LOOKUPID nvarchar(10), 
    CATEGORY nvarchar(155), 
    CODE nvarchar(25), 
    DESCRIPTION nvarchar(100) 
)   

create table #xml_error (
    ERRORID uniqueidentifier, 
    LOOKUPID nvarchar(10), 
    CATEGORY nvarchar(155), 
    CODE nvarchar(25), 
    DESCRIPTION nvarchar(100) 
)  

/* get the requests and responses for each transaction - some have messages or errors, and some do not. */ 

INSERT INTO #xml_transaction 
(
    TRANSACTIONID, 
    TRANSFERDATE, 
    LOOKUPID, 
    CATEGORY, 
    COMMUNITYID, 
    LASTUPDATED, 
    OPTIN, 
    SUCCESS 
) 
SELECT 
    id as trans_id 
    ,transferdate 
    ,request.value( 
     'declare namespace Req="http://www.w3.org/2001/XMLSchema-instance"; 
     (/ArrayOfAllMemberOptOutResults/AllMemberOptOutResults/@Constituent_Id)[1]','varchar(20)') as lookup_id 
    ,request.value(
     'declare namespace Req="http://www.w3.org/2001/XMLSchema-instance"; 
     (/ArrayOfAllMemberOptOutResults/AllMemberOptOutResults/@Column)[1]','varchar(100)') as req_email_category 
    ,request.value(
     'declare namespace Req="http://www.w3.org/2001/XMLSchema-instance"; 
     (/ArrayOfAllMemberOptOutResults/AllMemberOptOutResults/@Community_Id)[1]','varchar(100)') as req_community_id    
    ,request.value(
     'declare namespace Req="http://www.w3.org/2001/XMLSchema-instance"; 
     (/ArrayOfAllMemberOptOutResults/AllMemberOptOutResults/@Last_Updated)[1]','varchar(100)') as req_last_updated 
    ,request.value(
     'declare namespace Req="http://www.w3.org/2001/XMLSchema-instance"; 
     (/ArrayOfAllMemberOptOutResults/AllMemberOptOutResults/@OptIn)[1]','varchar(100)') as req_opt_in  
    ,response.value(
     'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/";     
                  (//@Success)[1]','varchar(100)') as response_successOrFailure      
    FROM dbo.USR_YALE_IMODULES_EMAIL_WEBSERVICE_LOG 

/* get any messages */ 

INSERT INTO #xml_message 
(
    MESSAGEID, 
    LOOKUPID, 
    CATEGORY, 
    CODE, 
    DESCRIPTION 
) 
    select 
      id as message_id 
      ,response.value(
      'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/Message";    
       (//@Constituent_Id)[1]','varchar(100)') as message_lookupid 
      ,response.value(
      'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/Message";    
       (//@Column)[1]','varchar(100)') as message_category 
      ,response.value(
      'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/Message";    
       (//@Code)[1]','varchar(100)') as message_code 
       ,response.value(
      'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/Message";    
       (//@Description)[1]','varchar(100)') as message_description  
    FROM dbo.USR_YALE_IMODULES_EMAIL_WEBSERVICE_LOG  

/* Get any errors */ 

INSERT INTO #xml_error 
(
    ERRORID, 
    LOOKUPID, 
    CATEGORY, 
    CODE, 
    DESCRIPTION 
)              
    select 
      id as error_id 
      ,response.value(
      'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/EmailCategoryUpdateMemberResult/Error";    
       (//@Constituent_Id)[1]','varchar(100)') as error_lookupid 
      ,response.value(
      'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/EmailCategoryUpdateMemberResult/Error";    
       (//@Column)[1]','varchar(100)') as error_category 
      ,response.value(
      'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/Error";    
       (//@Code)[1]','varchar(100)') as error_code 
       ,response.value(
      'declare namespace Detail="http://imodules.com/WebServices/EmailCategoryQuery/Error";    
       (//@Description)[1]','varchar(100)') as error_description  
    FROM dbo.USR_YALE_IMODULES_EMAIL_WEBSERVICE_LOG; 

答えて

0

単純なクエリを実行するには、任意の名前空間の*記号を使用することができます。例えば 、このクエリ戻りエラー要素:次にクエリがエラーコードを抽出する

;WITH XMLNAMESPACES('http://imodules.com/WebServices/EmailCategoryQuery/' AS q) 
    SELECT 
     response.query('/EmailCategoryUpdateResults/q:EmailCategoryUpdateMemberResult/q:Error') 
    FROM dbo.USR_YALE_IMODULES_EMAIL_WEBSERVICE_LOG 

:明示的な名前空間で

SELECT 
     response.query('/*:EmailCategoryUpdateResults/*:EmailCategoryUpdateMemberResult/*:Error') 
    FROM dbo.USR_YALE_IMODULES_EMAIL_WEBSERVICE_LOG 

次にクエリが同じ結果を与える

SELECT response.value('(/*:EmailCategoryUpdateResults/*:EmailCategoryUpdateMemberResult/*:Error/@Code)[1]', 'varchar(100)') 
    FROM dbo.USR_YALE_IMODULES_EMAIL_WEBSERVICE_LOG 

こちらがお役に立てば幸いです。

関連する問題