Aracılığıyla paylaş


(XQuery) işleme hatası

The W3C belirtim sağlar türü hata statik veya dinamik olarak oluşturulur ve statik, dinamik, tanımlar ve yazın hata.

Derleme ve hata işleme

Derleme hatası, yanlış sözdizimi kurallarına göre Xquery ifadeleri ve XML DML deyimlerini döndürülür.Derleme aşaması XQuery ifadeler ve DML deyimlerini statik türde doğruluğunu denetler ve XML şemaları için yazılan bir XML türü inferences için kullanır.İfade, çalışma sırasında başarısız olabilir, statik türde hataları harekete geçiren saat bir tür güvenlik ihlali nedeniyle.Dizenin bir tamsayı ve varolmayan bir düğüm yazılan veriler için sorgulama için ek statik hata örnektir.

Gelen W3C standart, XQuery çalışma - bir sapma olarak saat hataları boş sıralar dönüştürülür.Bu sıralar null olarak XML ya da null çağırma içerik üzerinde bağlı olarak sorgu sonucu için yaymak.

Atama çalışma zamanı hataları boş serileri dönüştürülür, ancak doğru türe açıkça çevrim kullanıcıların statik hatalara çözüm sağlar.

Statik hata

Statik hatalar kullanarakTransact-SQLhata bir mekanizma.InSQL Server, XQuery türü hatalar statik.Daha fazla bilgi için bkz:XQuery ve statik yazma.

Dinamik hataları

XQuery, en dinamik hataları boş bir sıra ("()") eşleştirilir.Ancak, iki özel durumlar şunlardır: Taşma koşullarını XQuery Toplayıcı işlevleri ve XML DML doğrulama hataları. Not en dinamik hatalar için boş bir sıra eşleştirilir.Aksi durumda, XML dizinler avantajlarından yararlanan sorgu yürütme beklenmeyen hatalara neden olabilir.Nedenle oluştururken beklenmeyen hatalar, olmadan verimli yürütmesini sağlamakSQL Server Database Engine() için dinamik hata eşlemeleri.

() İçin yanlış eşlenmiş olduğundan sık sık dinamik hata içinde bir karşılaştırma gerçekleştiği durumda, hatayı yükseltme semantik, değiştirmekte değil.Ancak, bazı durumlarda, () yerine, dinamik bir hata dönmeden beklenmeyen sonuçlara neden olabilir.Aşağıda bu gösteren örnekler verilmiştir.

Örnek: Avg() işlev bir dize kullanma

Aşağıdaki örnekte,Ort işlev olarak adlandırılan üç değerlerini. ortalamasını hesaplamak için Bu değerlerden birini dize.XML örnek türlenmemiş olduğundan, bu durumda tüm verileri türlenmemiş atomik türü değil.The avg() function first casts these values to xs:double before computing the average.Ancak değeri"Hello"yapamıyor atama içinxs:doubleve dinamik bir hata.Bu durumda, yerine, dinamik bir hata, çevrim döndürme"Hello"toxs:doubleneden boş bir sıra.The avg() function 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(//*)')

Örnek: Değil kullanarak işlev

Kullandığınızda,değil işlev gibi bir karşılaştırma, /SomeNode[not(Expression)], ifade bir dinamik hatasına neden oluyor, boş bir sıra bir hata. yerine döner veUygulamanot()boş için sıra verir doğru yerine bir hata.

Örnek: Bir dize çevrim

Aşağıdaki örnekte, hazır bilgi dizesi "NaN" xs:dize, sonra xs:double atama.Boş bir satır kümesi sonucudur."NaN" dize xs:double için başarılı bir şekilde atanamaz, ancak dize xs:string için ilk atama için bu kadar çalışma belirlenemiyor.

DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double(xs:string("NaN")) ')
GO

Bu örnekte, ancak statik türde bir hata oluşur.

DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double("NaN") ')
GO

Uygulama kısıtlamaları

The fn:error() function is not supported.