În clauza FOR XML, puteți solicita ca interogarea să returneze o schemă încorporată împreună cu rezultatele interogării. Dacă doriți să obțineți o schemă XDR, ar trebui să utilizați cuvântul cheie XMLDATA în clauza FOR XML. Dacă trebuie să obțineți o schemă XSD, atunci ar trebui să utilizați cuvântul cheie XMLSCHEMA.
Această secțiune descrie cuvântul cheie XMLSCHEMA și explică structura schemei XSD încorporate. Următoarele sunt limitările care apar atunci când solicitați scheme încorporate.
Parametrul XMLSCHEMA poate fi setat numai în modurile RAW și AUTO, acest lucru nu se poate face în modul EXPLICIT.
Dacă este definită o directivă TYPE în subdotarea FOR XML, rezultatul interogării va avea tipul de date xml și va fi trecut pentru o instanță de date XML netumite. Pentru mai multe informații, consultați datele XML (SQL Server).
În schema rezultată, pot exista o serie de documente de schemă care descriu diferite spații de nume. Cel puțin următoarele două scheme trebuie returnate.
Un document de schemă pentru spațiul de nume Sqltypes. pentru care sunt returnate tipurile de bază SQL.
Un alt document de schemă care descrie forma rezultatului interogării FOR XML.
În plus, dacă rezultatul interogării include orice tip de date xml. atunci schemele asociate cu aceste tipuri de date xml sunt returnate.
Spațiul de nume al documentului țintă al documentului schemei care descrie formularul de rezultat FOR FORM conține o parte fixă și o parte numerică care este incrementată automat. Formatul acestui spațiu de nume este prezentat mai jos, unde n este un număr întreg pozitiv. De exemplu, în interogarea anterioară, spațiul de nume țintă a fost urn: schemas-microsoft-com: sql: SqlRowSet1.
Modificările din spațiile de nume țintă ca urmare a celor întâmplate între cele două runde pot fi nedorite. De exemplu, dacă se solicită XML-ul rezultat, atunci când schimbați zonele de destinații țintă, trebuie să actualizați interogarea. Dacă este necesar, puteți specifica un spațiu de nume destinație atunci când parametrul XMLSCHEMA este adăugat la clauza FOR XML. XML-ul rezultat va conține spațiul de nume specificat și va rămâne neschimbat indiferent de câte ori interogarea a fost executată.
Deoarece directiva ELEMENTS este adăugată la interogare, rezultatul XML este generat folosind elemente. De asemenea, această solicitare specifică o directivă XMLSCHEMA, astfel încât schema încorporată XSD este returnată. Setul de rezultate:
Rețineți următoarele date din interogarea anterioară.
Următoarele raționamente utilizează tabelele CustOrder și CustOrderDetail. Pentru a testa următoarele mostre, creați aceleași tabele și adăugați propriile date de probă:
Acesta este XML-ul rezultat. Numai o parte din XSD built-in este afișată:
Rețineți următoarele în schema încorporată XSD.
Ambele valori, ListPrice și DealerPrice, au același tip de date, bani. și ambele pot avea valoarea NULL în tabel. Astfel, deoarece ele nu se pot întoarce în XML rezultant, în declararea unui tip de element complex
Ca rezultat, deoarece valoarea DealerPrice din tabel este NULL, ca element
Cazul 2. O coloană cheie și o coloană non-cheie de același tip
Următoarea interogare conține o coloană cheie și o coloană non-cheie de același tip.
Rezultatul. Numai o parte din schema încorporată XSD este afișată:
Rețineți că în schema încorporată XSD elementul
Cazul 3. Ambele elemente de diferite tipuri și coloanele corespunzătoare pot fi NULL
Pentru cazul 2, următoarea interogare este dată în raport cu tabelul de eșantionare:
În această interogare, Col2 și Col3 au aceleași pseudonime. Aceasta duce la apariția a două elemente cu același nume, care sunt elementele copilului elementului
IgnoreKanaType IgnoreWidth "sqltypes: sqlSortId =" 52 "> Rețineți următoarele în schema încorporată XSD. Ca rezultat, fiecare instanță a unui element