Aracılığıyla paylaş


XML Güncelleme Gramlarının Yönergeleri ve Sınırlamaları (SQLXML 4.0)

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

XML updategrams kullanırken şunları unutmayın:

  • Eğer sadece tek bir< çift öncesi> ve <sonrası> bloğu olan bir ekleme işlemi için updategram kullanıyorsanız, <before> bloğu çıkarılabilir. Buna karşılık, silme işlemi durumunda, <after> block çıkarılabilir.

  • Eğer senkronizasyon> etiketinde birden fazla önce ve sonra bloğu< olan bir updategram kullanıyorsanız, hem <önce> hem de <sonra> blokları önceden ve sonra çiftleri oluşturmak için belirtilmelidir<>.<><><>

  • Bir updategram'daki güncellemeler, XML şeması tarafından sağlanan XML görünümüne uygulanır. Bu nedenle, varsayılan eşlemenin başarılı olması için ya updategram'da şema dosya adını belirtmeniz gerekir ya da dosya adı sağlanmazsa, öğe ve öznitelik adları veritabanındaki tablo ve sütun adlarıyla eşleşmelidir.

  • SQLXML 4.0, bir updategram'daki tüm sütun değerlerinin, övlak öğeleri için XML görünümünü oluşturmak için sağlanan şemada (XDR veya XSD) açıkça eşlenmesini gerektirir. Bu davranış, SQLXML'nin önceki sürümlerinden farklıdır; çünkü sql:ilişki açıklamasında yabancı anahtarın parçası olarak ima edilen bir sütun için bir değer şemada eşlenmeyen bir değer sağlardı. (Bu değişikliğin birincil anahtar değerlerinin child elemanlara yayılmasını etkilemediğini unutmayın; bu durum, alt eleman için açıkça belirtilmemiş SQLXML 4.0 için hâlâ gerçekleşir.

  • Eğer ikili bir sütundaki veriyi (örneğin SQL Server görüntü veri tipi gibi) değiştirmek için updategram kullanıyorsanız, SQL Server veri tipi (örneğin, sql:datatype="image") ve XML veri tipi (örneğin, dt:type="binhex" veya dt:type="binbase64) belirtilmesi gereken bir eşleme şeması sağlamalısınız. İkili sütun için veri updategramda belirtilmelidir; Eşleme şemasında belirtilen SQL:URL kodlama açıklaması updategram tarafından göz ardı edilir.

  • Bir XSD şeması yazarken, sql:relation veya sql:field annotasyonu için belirttiğiniz değerde özel bir karakter, örneğin "Order Details" tablo adında, boşluk karakteri varsa, bu değer parantez içinde olmalı (örneğin, "[Order Details]").

  • updategram kullanıldığında, zincir ilişkileri desteklenmez. Örneğin, A ve C tabloları B tablosunu kullanan bir zincir ilişkisi üzerinden ilişkilendiriliyorsa, updategramı çalıştırıp çalıştırmaya çalışırken aşağıdaki hata meydana gelir:

    There is an inconsistency in the schema provided.  
    

    Hem şema hem de updategram aksi şekilde doğru ve geçerli şekilde oluşturulmuş olsa bile, bu hata zincir ilişkisi varsa meydana gelir.

  • Güncelleme gramları, güncellemeler sırasında görüntü tipi verilerinin parametre olarak aktarılmasına izin vermez.

  • Metin/ntext ve görseller gibi ikili büyük nesne (BLOB) türleri, updategram ile çalışırken before> bloğunda kullanılmamalıdır<, çünkü bu, onları eşdeğer kontrolünde kullanmak üzere içerecektir. Bu, BLOB türleri için karşılaştırma kısıtlamaları nedeniyle SQL Server ile sorunlara yol açabilir. Örneğin, LIKE anahtar kelimesi, metin veri tipinin sütunları arasında karşılaştırma yapmak için WHERE cümlesinde kullanılır; ancak veri boyutu 8K'dan büyük olan BLOB tiplerinde karşılaştırmalar başarısız olur.

  • ntext verisindeki özel karakterler, BLOB türleri için karşılaştırma kısıtlamaları nedeniyle SQLXML 4.0 ile sorunlara yol açabilir. Örneğin, ntext tipli bir sütunun eşzamanlılık kontrolünde bir updategramın önceki> bloğunda "[Serializable]<" kullanımı aşağıdaki SQLOLEDB hata açıklamasıyla başarısız olur:

    Empty update, no updatable rows found   Transaction aborted  
    

Ayrıca Bkz.

Güncelleştirme Birimi Güvenlik Konuları (SQLXML 4.0)