2015-12-10 3 views
1

Я пытаюсь сгенерировать атрибут с использованием XML-модификации SQL-сервера. каждого атрибута я пытаюсь создать этоПроблема с XML Modify

HRef="#'2'!A1" 

запрос, который я использую

set @xml.modify('declare default element namespace "urn:schemas-microsoft-com:office:spreadsheet"; 
       declare namespace ss="urn:schemas-microsoft-com:office:spreadsheet"; 
       declare namespace x="urn:schemas-microsoft-com:office:excel"; 
       insert attribute ss:HRef {"#''sql:variable(""@worksheets"")''!A1"}  
       into (/Workbook/Worksheet[1]/Table/Row[sql:variable("@worksheets")]/Cell)[1]'); 

В SQL: переменная («@ рабочих листов») исходит из переменной цикла. и его значение равно 1, 2, 3 для каждого цикла. Таким образом, значения, которые хотят в этом атрибуте должен быть

HRef="#'1'!A1" 
HRef="#'2'!A1" 
HRef="#'3'!A1" 

Теперь вопрос, значение не меняется в XML. Если я использую следующий запрос

insert attribute ss:HRef {"#''sql:variable(""@worksheets"")''!A1"}  
       into (/Workbook/Worksheet[1]/Table/Row[sql:variable("@worksheets")]/Cell)[1]'); 

атрибут, который генерируется в XML является

сс: HREF = "# 'SQL: переменная (" @worksheets ")'! A1"

который worng, он должен быть создан в качестве

HREF = "# '2'! A1"

По моему пониманию значение sql: variable («@ worksheets») не заменяется. Если я помещаю какое-то жестко закодированное значение вместо sql: variable ("@ worksheets"), то значения корректно отображаются в xml. Может ли кто-нибудь предложить, что я делаю неправильно.

Пример XML, что я использую это

<?xml version="1.0"?> 
<?mso-application progid="Excel.Sheet"?> 
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
    <Styles xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
     <Style ss:ID="Default" ss:Name="Normal"> 
      <Alignment ss:Vertical="Bottom"/> 
      <Borders/> 
      <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/> 
      <Interior/> 
      <NumberFormat/> 
      <Protection/> 
     </Style> 
     <Style ss:ID="s62"> 
      <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000" ss:Bold="1"/> 
     </Style> 
     <Style ss:ID="s63" ss:Name="Hyperlink"> 
      <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#0000FF" ss:Underline="Single"/> 
     </Style> 
    </Styles> 
    <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:Name="1"> 
     <Table xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:DefaultColumnWidth="125"> 
      <Column ss:AutoFitWidth="1"/> 
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">Worksheet #</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String"/> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">1</Data> 
       </Cell> 
      </Row> 
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:HRef="#'sql:variable(&quot;@worksheets&quot;)'!A1"> 
        <Data ss:Type="String">1</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
        <Data ss:Type="String"/> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
        <Data ss:Type="String">1</Data> 
       </Cell> 
      </Row> 
     </Table> 
    </Worksheet> 
    <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:Name="2"> 
     <Table xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:DefaultColumnWidth="125"> 
      <Column ss:AutoFitWidth="1"/> 
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">Audit ID</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">Audit Subcategory ID</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">2</Data> 
       </Cell> 
      </Row> 
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
        <Data ss:Type="String">105076</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
        <Data ss:Type="String">10</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
        <Data ss:Type="String">2</Data> 
       </Cell> 
      </Row> 
     </Table> 
    </Worksheet> 
    <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:Name="3"> 
     <Table xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:DefaultColumnWidth="125"> 
      <Column ss:AutoFitWidth="1"/> 
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">Audit ID</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">Audit Subcategory ID</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">3</Data> 
       </Cell> 
      </Row> 
     </Table> 
    </Worksheet> 
    <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:Name="4"> 
     <Table xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:DefaultColumnWidth="125"> 
      <Column ss:AutoFitWidth="1"/> 
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">Audit ID</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">Audit Subcategory ID</Data> 
       </Cell> 
       <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="s62"> 
        <Data ss:Type="String">4</Data> 
       </Cell> 
      </Row> 
     </Table> 
    </Worksheet> 
</Workbook> 
+0

Возможно, у нас есть демонстрационное значение для @xml? –

+0

@RossPresser, Спасибо, что спросил. Я изменил вопрос с помощью образца xml. –

ответ

2

Проблема заключается в том, что здесь

insert attribute ss:HRef {"#''sql:variable(""@worksheets"")''!A1"} 

, кажется, как будто вы ожидаете XQuery к «волшебным» сцепить эти строки. Вам нужно указать его. Тот факт, что вам нужно было добавить дополнительные кавычки и апострофы, означает, что он рассматривает его как одну строку.

Добавленные должен выглядеть следующим образом

set @xml.modify('declare default element namespace "urn:schemas-microsoft-com:office:spreadsheet"; 
       declare namespace ss="urn:schemas-microsoft-com:office:spreadsheet"; 
       declare namespace x="urn:schemas-microsoft-com:office:excel"; 
       insert attribute ss:HRef {concat("#", sql:variable("@worksheets") cast as xs:string?, "!A1")} 
       into (/Workbook/Worksheet[1]/Table/Row[sql:variable("@worksheets")]/Cell)[1]'); 

Я предполагаю, что @worksheets является числовым переменным; это причина для cast as xs:string.

+0

Спасибо, это был правильный ответ. Это была ошибка, которую я делал. –

+0

Если это решит вашу проблему, вы можете пометить этот ответ как принятый. –