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.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Veritabanı sorgusundan döndürülen satırları, bazı sınırlayıcı değerlere göre sınırlayabilirsiniz. sql:limit-field ve sql:limit-value annotasyonları, sınırlayıcı değerleri içeren veritabanı sütununu tanımlamak ve geri dönen verileri filtrelemek için kullanılacak belirli bir sınırlama değerini belirtmek için kullanılır.
sql:limit alanı açıklaması, sınırlayıcı değer içeren bir sütunu tanımlamak için kullanılır; her eşlenen eleman veya öznitelikte bu izinlidir.
sql:limit-değer açıklaması, sql:limit alan açıklamasında belirtilen sütundaki sınırlı değeri belirtmek için kullanılır. sql:limit-değer açıklaması isteğe bağlıdır. sql:limit-değeri belirtilmemişse, NULL değeri varsayılır.
Uyarı
SQL sütunu gerçek tipte olan bir sql:limit alanı ile çalışırken, SQLXML 4.0, XML şemalarında belirtilen sql:limit değerindenvarchar tarafından belirlenen bir değer olarak dönüşüm gerçekleştirir. Bu, ondalık sınır değerlerinin tam bilimsel gösterimle belirtilmesini gerektirir. Daha fazla bilgi için aşağıdaki Örnek B'ye bakınız.
Örnekler
Bu örneklerle çalışma örnekleri oluşturmak için aşağıdakilerin kurulu olması gerekir:
Microsoft SQL Server Yerel İstemcisi
MDAC 2.6 veya daha yeni sürümler
Bu örneklerde, şablonlar XSD eşleme şemasına karşı XPath sorgularını belirtmek için kullanılır.
A. Geri dönen müşteri adreslerinin belirli bir adres türüne sınırlandırılması
Bu örnekte, bir veritabanı iki tablo içerir:
Müşteri (CustomerID, Şirket Adı)
Adresler (CustomerID, AddressType, StreetAddress)
Bir müşterinin bir gönderim adresi ve/veya faturalama adresi olabilir. AddressType sütun değerleri Gönderim ve Faturalandırma şeklindedir.
Bu, ShipTo şemasının Adresler ilişkisindeki StreetAddress sütununa eşlediği eşleme şemasıdır. Bu öznitelik için döndürülen değerler, sql:limit-field ve sql:limit-value açıklamaları belirtilerek yalnızca gönderim adresleriyle sınırlandırılır. Benzer şekilde, BillTo şema özniteliği sadece müşterinin faturalama adresini döndürür.
Şema şöyle:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustAddr"
parent="Customer"
parent-key="CustomerID"
child="Addresses"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Customer" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="BillTo"
type="xsd:string"
sql:relation="Addresses"
sql:field="StreetAddress"
sql:limit-field="AddressType"
sql:limit-value="billing"
sql:relationship="CustAddr" >
</xsd:element>
<xsd:element name="ShipTo"
type="xsd:string"
sql:relation="Addresses"
sql:field="StreetAddress"
sql:limit-field="AddressType"
sql:limit-value="shipping"
sql:relationship="CustAddr" >
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:int" />
<xsd:attribute name="CompanyName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Örnek XPath sorgusunu şema karşısında test etmek için
tempdb veritabanında iki tablo oluşturun:
USE tempdb CREATE TABLE Customer (CustomerID int primary key, CompanyName varchar(30)) CREATE TABLE Addresses(CustomerID int, StreetAddress varchar(50), AddressType varchar(10))Örnek verileri ekleyin:
INSERT INTO Customer values (1, 'Company A') INSERT INTO Customer values (2, 'Company B') INSERT INTO Addresses values (1, 'Obere Str. 57 Berlin', 'billing') INSERT INTO Addresses values (1, 'Avda. de la Constituci?n 2222 M?xico D.F.', 'shipping') INSERT INTO Addresses values (2, '120 Hanover Sq., London', 'billing') INSERT INTO Addresses values (2, 'Forsterstr. 57, Mannheim', 'shipping')Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı LimitFieldValue.xmlolarak kaydet.
Aşağıdaki şablonu (LimitFieldValueT.xml) oluşturun ve önceki adımda şemayı (LimitFieldValue.xml) kaydettiğiniz şekilde kaydedin:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="LimitFieldValue.xml"> /Customer </sql:xpath-query> </ROOT>Eşleme şeması (LimitFieldValue.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:
mapping-schema="C:\MyDir\LimitFieldValue.xml"Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.
Daha fazla bilgi için bkz. Using ADO to execute SQLXML Queries.
Sonuç şu şekildedir:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1" CompanyName="Company A">
<BillTo>Obere Str. 57 Berlin</BillTo>
<ShipTo>Avda. de la Constituci?n 2222 M?xico D.F.</ShipTo>
</Customer>
<Customer CustomerID="2" CompanyName="Company B">
<BillTo>120 Hanover Sq., London</BillTo>
<ShipTo>Forsterstr. 57, Mannheim</ShipTo>
</Customer>
</ROOT>
B. Gerçek veri tipinin indirim değerine dayalı sonuçları sınırlamak
Bu örnekte, bir veritabanı iki tablo içerir:
Emirler (Sipariş Kimliği)
SiparişDetaylar (Sipariş Kimliği, Ürün Kimliği, Birim Fiyatı, Miktar, Fiyat, İndirim)
Bu, sipariş detaylarındaki OrderID özniteliğinin, emirler ilişkisindeki OrderID sütununa eşlediği eşleme şemasıdır. Bu öznitelik için döndürülen değerler, yalnızca sql:limit-field ve sql:limit-değer açıklamaları kullanılarak belirtilen Discount özniteliği için belirtildiği şekilde 2.0000000e-001 (0.2) değerine sahip olanlarla sınırlıdır.
Şema şöyle:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="OrderOrderDetails"
parent="Orders"
parent-key="OrderID"
child="OrderDetails"
child-key="OrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="root" sql:is-constant="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Orders" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="orderDetail"
sql:relation="OrderDetails"
sql:limit-field="Discount" sql:limit-value="2.0000000e-001"
sql:relationship="OrderOrderDetails">
<xsd:complexType>
<xsd:attribute name="OrderID" />
<xsd:attribute name="ProductID" />
<xsd:attribute name="Discount" />
<xsd:attribute name="Quantity" />
<xsd:attribute name="UnitPrice" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="OrderID"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Örnek XPath sorgusunu şema karşısında test etmek için
tempdb veritabanında iki tablo oluşturun:
USE tempdb CREATE TABLE Orders ([OrderID] int NOT NULL ) ON [PRIMARY] ALTER TABLE Orders WITH NOCHECK ADD CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED ( [OrderID] ) ON [PRIMARY] CREATE TABLE [OrderDetails] ( [OrderID] int NOT NULL , [ProductID] int NOT NULL , [UnitPrice] money NULL , [Quantity] smallint NOT NULL , [Discount] real NOT NULL ) ON [PRIMARY]Örnek verileri ekleyin:
INSERT INTO Orders ([OrderID]) values (10248) INSERT INTO Orders ([OrderID]) values (10250) INSERT INTO Orders ([OrderID]) values (10251) INSERT INTO Orders ([OrderID]) values (10257) INSERT INTO Orders ([OrderID]) values (10258) INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10248,11,14,12,0) INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10250,51,42.4,35,0.15) INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10251,22,16.8,6,0.05) INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10257,77,10.4,15,0) INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10258,2,15.2,50,0.2)Şemayı (LimitFieldValue.xml) bir dizine kaydedin.
Aşağıdaki test betisini (TestQuery.vbs) oluşturun, MyServer'ı SQL Server bilgisayarınızın adına göre değiştirin ve şemayı kaydetmek için önceki adımda kullandığınız aynı dizine kaydedin:
Set conn = CreateObject("ADODB.Connection") conn.Open "Provider=SQLOLEDB;Data Source=MyServer;Database=tempdb;Integrated Security=SSPI" conn.Properties("SQLXML Version") = "sqlxml.4.0" Set cmd = CreateObject("ADODB.Command") Set stm = CreateObject("ADODB.Stream") Set cmd.ActiveConnection = conn stm.open result ="none" strXPathQuery="/root" DBGUID_XPATH = "{EC2A4293-E898-11D2-B1B7-00C04F680C56}" cmd.Dialect = DBGUID_XPATH cmd.CommandText = strXPathQuery cmd.Properties("Mapping schema") = "LimitFieldReal.xml" cmd.Properties("Output Stream").Value = stm cmd.Properties("Output Encoding") = "utf-8" WScript.Echo "executing for xml query" On Error Resume Next cmd.Execute , ,1024 if err then Wscript.Echo err.description Wscript.Echo err.Number Wscript.Echo err.source On Error GoTo 0 else stm.Position = 0 result = stm.ReadText end if WScript.Echo result Wscript.Echo "done"Windows Explorer'da üzerine tıklayarak TestQuery.vbs dosyasını çalıştırın.
Sonuç şu şekildedir:
<root> <Order OrderID="10248"/> <Order OrderID="10250"/> <Order OrderID="10251"/> <Order OrderID="10257"/> <Order OrderID="10258"> <orderDetail OrderID="10258" ProductID="2" Discount="0.2" Quantity="50"/> </Order> </root>
Ayrıca Bkz.
Float ve gerçek (Transact-SQL)
nchar ve nvarchar (Transact-SQL)
SQL Server Yerel İstemcisini Yükleme
Sorgularda Açıklamalı XSD Şemalarının Kullanımı (SQLXML 4.0)