2011-10-19 32 views
1

次のコードでは、繰り返される実際の名前空間の削除

declare namespace pd="http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd 

は本当に厄介と従うことが困難コードを作る6回繰り返されている:私は何をしたいか

SELECT XW_PK, xw_ExeVersion, xw_enterpriseCode, xw_DatabaseCode, xw_CompanyCode, 
    Poodle.Love.value('declare namespace pd="http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd"; 
    (pd:action/@name)[1]', 'varchar(100)') Name, 
    Poodle.Love.value('declare namespace pd="http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd"; 
    (pd:action/@started)[1]', 'varchar(100)') [Started], 
    Poodle.Love.value('declare namespace pd="http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd"; 
    (pd:action/@ended)[1]', 'varchar(100)') [Ended], 
    Poodle.Love.value('declare namespace pd="http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd"; 
    (pd:action/@Elapsed)[1]', 'varchar(100)') Elapsed, 
    Poodle.Love.value('declare namespace pd="http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd"; 
    (pd:action/@elapsedWithChildren)[1]', 'varchar(100)') elapsedWithChildren 
    FROM stmusage 
     CROSS APPLY xw_rawData.nodes('declare namespace pd="http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd"; 
     /pd:performanceMeasurement/pd:action') as Poodle(Love) 

を一度だけ名前空間を宣言し、それを使って行うことです。問題は、xqueryのそれぞれが文字列に埋め込まれていることです。私は完全にはわかりませんが、私が長年に渡って取り上げた経験は、これらの文字列がそれぞれと相互作用しないという圧倒的な印象を与えてくれますいつでもすぐに他の

答えて

0
として
SELECT 
      XMLTable.actions.value('(@name)', 'varchar(100)') Name, 
      XMLTable.actions.value('(@started)', 'datetime') [Started], 
      XMLTable.actions.value('(@started)', 'datetime') + 
      convert(float, replace (replace (XMLTable.actions.value('(@elapsedWithChildren)', 'varchar(100)'),'PT',''),'S',''))/(60 * 60 * 24) Ended, --dodgy floating point rounding errors 
      convert(float, replace (replace (XMLTable.actions.value('(@elapsed)', 'varchar(100)'),'PT',''),'S','')) Elapsed, 
      convert(float, replace (replace (XMLTable.actions.value('(@elapsedWithChildren)', 'varchar(100)'),'PT',''),'S','')) ElapsedWithChildren, 
      XMLTable.actions.value('@moduleId','varchar(100)') moduleid, 
      XMLTable.actions.value('@actionCount','int') actionCount, 
      XW_PK, XW_ExeVersion, XW_EnterpriseCode, XW_DatabaseCode, XW_CompanyCode, ExportType 
      FROM StmUsage 
       CROSS APPLY xw_rawData.nodes('declare namespace pd="http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd"; 
       /pd:performanceMeasurement/pd:action') XMLTable(actions) 
      cross join (select 'Elapsed' ExportType union select 'ElapsedWithChildren') ExportTypeAlias 

簡単!

0

私はあなたが書いているプログラミング言語を知らないが、他の言語では、私は、パラメータPPPPPとして文字列「名前」または「開始」をとり、

プードルを生産する機能を記述します。 (varchar(1) '、' varchar(1) '); Love.value(' declare namespace d = "http://cargowise.com/ediEnterprise/2011/10/11/systemUsage.xsd"; (pd:action/@ {PPPPP} 100) ')

その結果です。

関連する問題