Błąd obsługi (XQuery)
Specyfikacja konsorcjum W3C umożliwia błędów typu należy podnieść statycznie lub dynamicznie i określa statyczny, dynamiczny i wpisz błędów.
Opracowanie i obsługa błędów
Błędy kompilacji są zwracane z składniowo niepoprawnych wyrażeń Xquery i instrukcje XML DML.Faza kompilacji sprawdza poprawność typu statycznego XQuery wyrażeń i DML instrukcji i korzysta ze schematów XML dla inferences typu wpisywanych XML.Jeśli wyrażenie może nie działać przy uruchomieniu niemożliwe błędów typu statycznego czas z powodu naruszenia zasad bezpieczeństwa typu.Przykłady statycznej o dodaniu ciąg na liczbę całkowitą z zakresu i wykonywania kwerend na nieistniejącym węzłem danych wpisywanych.
Jak odchylenie od normy W3C błędy czas wykonania XQuery są konwertowane na pusty sekwencji.Tych sekwencji może propagować jako pusta wartość NULL lub XML do wyniku kwerendy, w zależności od kontekstu wywołania.
Jawne rzutowania na prawidłowy typ. umożliwia użytkownikom obejść błędy statycznych, mimo że błędy wykonania rzutowania będzie można przekształcić je puste sekwencji.
Błędy statyczne
Błędy statyczne są zwracane przy użyciu Transact-SQL mechanizm błąd. W SQL ServerBłędy typu XQuery zwracane są statycznie. Aby uzyskać więcej informacji zobaczXQuery i wpisywania statyczne.
Błędy dynamiczne
W XQuery najbardziej dynamiczną błędów są mapowane na sekwencję pusty ("()").Są one jednak dwa wyjątki: Przepełnienie warunków w funkcje agregatora XQuery i błędy sprawdzania poprawności XML DML. Należy zauważyć, że najbardziej dynamiczną błędów są mapowane na sekwencję puste.W przeciwnym razie wykonywanie kwerendy wykorzystujące korzyści indeksów XML może podnieść nieoczekiwane błędy.W związku z tym, aby zapewnić skuteczne wykonanie bez generowania nieoczekiwane błędy SQL Server Database Engine mapuje błędy dynamiczne ().
Często w sytuacji, gdy błąd dynamiczne mogą się pojawić wewnątrz predykatu, nie podnoszenie błędu nie zmienia semantyka, ponieważ () jest mapowany na wartość false.Jednak w niektórych przypadkach powrotu () zamiast dynamiczne błędu może spowodować nieoczekiwane rezultaty.Poniżej przedstawiono przykłady, które ilustrują to.
Przykład: Przy użyciu funkcja avg() z ciąg
W poniższym przykładzie Funkcja Avg nazywa się obliczyć średnią z trzech wartości.Jedną z następujących wartości jest ciągiem.Ponieważ wystąpienie XML w tym przypadek jest bez typu, wszystkie dane w nim jest typu niepodzielny bez typu.The avg() funkcja first casts these values to xs:double before computing the average. Jednak wartości, "Hello", nie można rzutować na xs:double i tworzy dynamiczne błąd. W takim przypadek zamiast zwracać błąd dynamiczne, rzutowania z "Hello" Aby xs:double powoduje, że sekwencję puste. The avg() funkcja ignores this value, computes the average of the other two values, and returns 150.
DECLARE @x xml
SET @x=N'<root xmlns:myNS="test">
<a>100</a>
<b>200</b>
<c>Hello</c>
</root>'
SELECT @x.query('avg(//*)')
Przykład: Za pomocą nie , funkcja
Po użyciu funkcja nie w predykacie, na przykład, /SomeNode[not(Expression)], a wyrażenie powoduje błąd dynamicznych, zostaną zwrócone sekwencję pusty zamiast błędu. Zastosowanie not() do pustych sekwencji zwraca wartość PRAWDA, zamiast błędu.
Przykład: Rzutowanie ciąg
W poniższym przykładzie xs:ciąg, a następnie do xs:double rzutować jest literałem ciąg znaków "NaN".Wynik jest pustych zestaw wierszy.Mimo, że ciąg „ NaN"pomyślnie nie można rzutować na xs:double, to nie można określić aż do czasu wykonania, ponieważ ciąg jest najpierw rzutować xs:string.
DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double(xs:string("NaN")) ')
GO
W tym przykładzie jednak typu statycznego wystąpi błąd.
DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double("NaN") ')
GO
defaultButton
The fn:error() funkcja is not supported.
See Also