Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
A W3C-specifikáció lehetővé teszi, hogy a típushibák statikusan vagy dinamikusan legyenek előállítva, és statikus, dinamikus és típushibákat határoznak meg.
Fordítás és hibakezelés
A fordítási hibákat a rendszer szintaktikailag helytelen Xquery-kifejezésekből és XML DML utasításokból adja vissza. A fordítási fázis ellenőrzi az XQuery-kifejezések és DML-utasítások statikus típus-helyességét, és XML-sémákat használ a gépelt XML típuskövetkezményeihez. Statikus típushibákat okoz, ha egy kifejezés futásidőben meghiúsulhat egy típusbiztonsági szabálysértés miatt. Statikus hiba például egy sztring egész számhoz való hozzáadása és a beírt adatok nem létező csomópontjának lekérdezése.
A W3C szabványtól való eltérésként az XQuery futásidejű hibái üres sorozatokká alakulnak. Ezek a sorozatok a meghívási környezettől függően üres XML-fájlként vagy NULL lekérdezési eredményként propagálódhatnak.
A helyes típusra történő explicit öntés lehetővé teszi a felhasználók számára a statikus hibák megkerülésére, bár a futásidejű leadási hibák üres sorozatokká alakulnak át.
Megjegyzés:
Az XQuery-elemző által kiváltott hibák elemzése (például az XML-adattípus metódus részeként hivatkozott XML szintaxishibái) megszakítják az aktív tranzakciót, függetlenül az aktuális munkamenet XACT_ABORT beállításától.
Statikus hibák
A statikus hibákat a rendszer a Transact-SQL hibamechanizmus használatával adja vissza. Az SQL Server xQuery típusú hibái statikusan jelennek meg. További információ: XQuery és Static Typing.
Dinamikus hibák
Az XQueryben a legtöbb dinamikus hiba egy üres sorozatra ("()") van leképezve. Ez azonban a két kivétel: az XQuery-összesítő függvények túlcsordulási feltételei és XML-DML érvényesítési hibák. A legtöbb dinamikus hiba üres sorozatra van leképezve. Ellenkező esetben az XML-indexek előnyeit kihasználó lekérdezés-végrehajtás váratlan hibákat eredményezhet. Ezért, hogy hatékony végrehajtást biztosítson váratlan hibák generálása nélkül, az SQL Server adatbázismotor a dinamikus hibákat a () értékre képezi le.
Gyakran előfordul, hogy abban a helyzetben, amikor a dinamikus hiba egy predikátumban fordul elő, a hiba nem emelése nem módosítja a szemantikát, mert () hamisra van leképezve. Bizonyos esetekben azonban a dinamikus hiba helyett a visszatérés () váratlan eredményeket okozhat. Az alábbi példák ezt szemléltetik.
Példa: Az avg() függvény használata sztringgel
A következő példában az Avg függvény a három érték átlagának kiszámítására van meghívva. Az értékek egyike egy sztring. Mivel ebben az esetben az XML-példány nincs begépelve, a benne lévő összes adat nem íratlan atomtípusú. Az avg() függvény először xs:double értékre öntötte ezeket az értékeket, mielőtt kiszámítja az átlagot. Az érték "Hello"azonban nem vethető xs:double értékre, és dinamikus hibát okoz. Ebben az esetben ahelyett, hogy dinamikus hibát ad vissza, az xs:double értékre történő kiosztás "Hello" üres sorozatot okoz. Az avg() függvény figyelmen kívül hagyja ezt az értéket, kiszámítja a másik két érték átlagát, és 150 értéket ad vissza.
DECLARE @x xml
SET @x=N'<root xmlns:myNS="test">
<a>100</a>
<b>200</b>
<c>Hello</c>
</root>'
SELECT @x.query('avg(//*)')
Példa: A nem függvény használata
Ha például a Not függvényt használja egy predikátumban, /SomeNode[not(Expression)]és a kifejezés dinamikus hibát okoz, a rendszer hiba helyett üres sorozatot ad vissza. Ha a not() függvényt az üres sorozatra alkalmazza, az igaz értéket adja vissza hiba helyett.
Példa: Sztring kiosztása
A következő példában a "NaN" literális sztring xs:string, majd xs:double értékre lesz öntött. Az eredmény egy üres sorkészlet. Bár a "NaN" sztringet nem lehet sikeresen xs:double értékre leadni, ez futásidőben nem határozható meg, mert a sztringet először xs:stringre öntötték.
DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double(xs:string("NaN")) ')
GO
Ebben a példában azonban statikus típusú hiba történik.
DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double("NaN") ')
GO
Megvalósítási korlátozások
Az fn:error() függvény nem támogatott.