Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
W3C belirtimi, tür hatalarının statik veya dinamik olarak yükseltilmesine olanak tanır ve statik, dinamik ve tür hatalarını tanımlar.
Derleme ve hata işleme
Derleme hataları söz dizimsel olarak yanlış Xquery ifadelerinden ve XML DML deyimlerinden döndürülür. Derleme aşaması, XQuery ifadelerinin ve DML deyimlerinin statik tür doğruluğunu denetler ve yazılan XML için tür çıkarımları için XML şemaları kullanır. Bir ifadenin çalışma zamanında tür güvenliği ihlali nedeniyle başarısız olması durumunda statik tür hataları oluşturur. Statik hataya örnek olarak bir dizenin tamsayıya eklenmesi ve türü belirtilen veriler için var olmayan bir düğüm için sorgulanması verilebilir.
W3C standardından sapma olarak, XQuery çalışma zamanı hataları boş dizilere dönüştürülür. Bu diziler, çağırma bağlamını bağlı olarak boş XML olarak veya NULL sorgu sonucuna yayabilir.
Doğru türe açık atama, kullanıcıların statik hatalara geçici bir çözüm bulmasını sağlar, ancak çalışma zamanı atama hataları boş dizilere dönüştürülür.
Uyarı
XQuery ayrıştırıcısı tarafından ortaya çıkarılan hataları ayrıştırma (örneğin, XML veri türü yönteminin bir parçası olarak başvuruda bulunan XML'deki söz dizimi hataları gibi), geçerli oturumun XACT_ABORT ayarından bağımsız olarak etkin işlemi durdurun.
Statik hatalar
Statik hatalar, Transact-SQL hata mekanizması kullanılarak döndürülür. SQL Server'da XQuery türü hataları statik olarak döndürülür. Daha fazla bilgi için bkz. XQuery ve Statik Yazma.
Dinamik hatalar
XQuery'de çoğu dinamik hata boş bir sıra ("()") ile eşlenir. Ancak iki özel durum vardır: XQuery toplayıcı işlevlerindeki taşma koşulları ve XML-DML doğrulama hataları. Çoğu dinamik hata boş bir diziyle eşlenir. Aksi takdirde, XML dizinlerinden yararlanan sorgu yürütmesi beklenmeyen hatalara neden olabilir. Bu nedenle, beklenmeyen hatalar oluşturmadan verimli bir yürütme sağlamak için SQL Server Veritabanı Altyapısı dinamik hataları () ile eşler.
Genellikle, dinamik hatanın bir koşul içinde oluştuğu durumlarda, () False ile eşlendiğinden, hatanın yükseltilmemesi semantiği değiştirmez. Ancak bazı durumlarda, dinamik hata yerine () döndürülerek beklenmeyen sonuçlar elde edilebilir. Bunu gösteren örnekler aşağıda verilmiştir.
Örnek: avg() işlevini bir dizeyle kullanma
Aşağıdaki örnekte, üç değerin ortalamasını hesaplamak için Avg işlevi çağrılır. Bu değerlerden biri dizedir. Bu örnekteki XML örneği yazılmamış olduğundan, içindeki tüm veriler yazılmamış atomik türdedir.
avg() işlevi, ortalamayı hesaplamadan önce bu değerleri ilk olarak xs:double olarak dönüştürür. Ancak, değeri xs"Hello":double olarak atanamaz ve dinamik bir hata oluşturur. Bu durumda, dinamik bir hata döndürmek yerine xs:double'a dönüştürme "Hello" boş bir diziye neden olur.
avg() işlevi bu değeri yoksayar, diğer iki değerin ortalamasını hesaplar ve 150 döndürür.
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: not işlevini kullanma
Not işlevini örneğin/SomeNode[not(Expression)], bir koşulda kullandığınızda ve ifade dinamik bir hataya neden olduğunda, hata yerine boş bir sıra döndürülür. Boş diziye not() uygulanması hata yerine True döndürür.
Örnek: Dize atama
Aşağıdaki örnekte, "NaN" değişmez değeri xs:string ve ardından xs:double olarak yayınlanır. Sonuç boş bir satır kümesidir. "NaN" dizesi xs:double'a başarıyla gönderilemiyor olsa da, dize ilk olarak xs:string'e yayınlandığından çalışma zamanına kadar bu belirlenemez.
DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double(xs:string("NaN")) ')
GO
Ancak bu örnekte statik tür hatası oluşur.
DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double("NaN") ')
GO
Uygulama sınırlamaları
fn:error() işlevi desteklenmez.