Utilizzo di sql:field (schema XDR)

Nota importanteImportante

Questo argomento è incluso come riferimento per le applicazioni legacy. Per questa funzionalità non è previsto alcun progetto di sviluppo in futuro. Evitare di utilizzarla in un nuovo progetto di sviluppo. Utilizzare invece gli schemi XSD con annotazioni per creare le viste XML. Per ulteriori informazioni, vedere Introduzione agli schemi XSD con annotazioni (SQLXML 4.0). È possibile convertire gli schemi XDR con annotazioni esistenti in schemi XSD. Per ulteriori informazioni, vedere Conversione di schemi XDR con annotazioni in schemi XSD equivalenti (SQLXML 4.0).

L'annotazione sql:field specifica il mapping tra un elemento o un attributo in uno schema con annotazioni a una colonna in un database e può essere aggiunta a un elemento o a un attributo. L'annotazione sql:field viene ignorata negli elementi <AttributeType> dello schema con annotazioni. L'attributo sql:field specifica il nome della colonna mappata in una tabella o in una vista.

Ad esempio, sql:field può essere utilizzato per specificare il nome della colonna quando il nome non corrisponde al campo nello schema specificato in XDR. Il valore di sql:field deve essere un nome di colonna. I nomi di colonna costituiti da quattro parti, ad esempio database.owner.table.columnname, non sono consentiti. Questo è valido per tutte le annotazioni che accettano come valore il nome di colonna.

Esempi

Per creare esempi reali utilizzando gli esempi seguenti, è necessario soddisfare alcuni requisiti. Per ulteriori informazioni, vedere Requisiti per l'esecuzione di esempi di SQLXML.

A. Specificare sql:field per un elemento <attribute> dello schema XDR

In questo schema con annotazioni, l'annotazione sql:field viene specificata nell'elemento <attribute> dello schema. L'attributo sql:field esegue il mapping dell'attributo Email nello schema alla colonna EmailAddress della tabella Person.Contact.

Poiché il nome di attributo ContactID nello schema XDR è uguale a quello della colonna ContactID della tabella Person.Contact, sql:field non viene specificato. Il mapping viene eseguito per impostazione predefinita.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="Email" />
    <attribute type="ContactID" />
    <attribute type="Email" sql:field="EmailAddress" />
</ElementType>
</Schema>

Per testare una query Xpath di esempio sullo schema

  1. Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file con il nome sqlFieldXdr.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file con il nome sqlFieldXdrT.xml nella stessa directory in cui è stato salvato sqlFieldXdr.xml. La query nel modello seleziona un cliente con ContactID 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlFieldXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

    Il percorso di directory specificato per lo schema di mapping (sqlFieldXdr.xml) è relativo alla directory nella quale viene salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:

    mapping-schema="C:\SqlXmlTest\sqlFieldXdr.xml"
    
  3. Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.

    Per ulteriori informazioni, vedere Utilizzo di ADO per eseguire query SQLXML 4.0.

Di seguito è riportato il set di risultati parziale:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts ContactID="1" Email="gustavo0@adventure-works.com" /> 
</ROOT>

In uno schema di mapping gli attributi possono essere dichiarati a livello globale (ad esempio <AttributeType...>, dichiarati al di fuori dell'ambito di <ElementType>) e quindi vi viene fatto riferimento in <attribute type=...> come mostrato in questo schema.

In questo schema l'attributo LastName viene dichiarato a livello globale e vi viene fatto riferimento nell'ambito di Customer <ElementType>.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<AttributeType name="LastName" />
<ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />
    
    <attribute type="CustomerID" />
    <attribute type="FName" sql:field="FirstName" />
    <attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>

B. Specificare sql:field per un elemento <element> nello schema XDR

In questo schema con annotazioni, l'annotazione sql:field viene specificata nell'elemento <element> dello schema. L'annotazione sql:field esegue il mapping dell'elemento figlio <Email> nello schema alla colonna EmailAddress della tabella Person.Contact.

Senza l'annotazione esplicita, l'elemento figlio <Email> dell'elemento <Contacts> nello schema non eseguirà il mapping alla colonna EmailAddress della tabella Person.Contact poiché il mapping predefinito di elementi è a una relazione non a un campo. In tal caso,viene generata un'eccezione se <ElementType> contiene un attributo textOnly.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Email" />
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="Email" sql:field="EmailAddress" />
  </ElementType>
</Schema>

Per testare una query Xpath di esempio sullo schema

  1. Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file con il nome sqlFieldElementXdr.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file con il nome sqlFieldElementXdrT.xml nella stessa directory in cui è stato salvato il file sqlFieldElementXdr.xml. La query nel modello seleziona un cliente con ContactID 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlFieldElementXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

    Il percorso di directory specificato per lo schema di mapping (sqlFieldElementXdr.xml) è relativo alla directory nella quale viene salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:

    mapping-schema="C:\SqlXmlTest\sqlFieldElementXdr.xml"
    
  3. Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.

    Per ulteriori informazioni, vedere Utilizzo di ADO per eseguire query SQLXML 4.0.

Di seguito è riportato il set di risultati parziale:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts ContactID="1"> 
    <Email>gustavo0@adventure-works.com</Email> 
  </Contacts> 
</ROOT>

Se nell'indirizzo di posta elettronica <ElementType> viene specificato content="textOnly" e viene utilizzato il nome predefinito della colonna SQL ("EmailAddress"), l'annotazione sql:field non è necessaria nell'elemento figlio. In questo caso, l'elemento figlio <EmailAddress> eseguirà il mapping alla colonna EmailAddress della tabella Person.Contact.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="EmailAddress" content="textOnly" />
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="EmailAddress" />
  </ElementType>
</Schema>

Vedere anche

Riferimento