Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践using System;
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
using System.IO;
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
using System.Xml;
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
using System.Xml.Serialization;
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
}

 

Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践-- 创建临时表
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
IF OBJECT_ID('ClientAttributes'IS NOT NULL
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    
drop table ClientAttributes
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
go
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
-- problem with datetime datatype look above URL
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践--
 create a table with desired attributes
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
create table ClientAttributes
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践(
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    Age 
int not NULL check( Age > -1) ,
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    Weight numeric(
10,2not NULL check( Weight > 0),
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    Handed 
varchar(5not null check( Handed in ('left''right')),
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    QuitDate 
datetime null
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    HasInsurance 
bit not null default(1)
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践)
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
go
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践-- 创建 XML schema 并加上 client attributes
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践

Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
DECLARE @mySchema xml 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
-- this is the default schema that gets created from the ClientAttributes table
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践--
 however the check constraints aren't converted
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
SET @mySchema = (SELECT * FROM ClientAttributes FOR XML AUTO, ELEMENTS, XMLSCHEMA('ClientAttributes'))
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
-- see the schema that gets auto-created
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
select @mySchema 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践<!-- 执行后得到以下xml -->
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
<xsd:schema xmlns:schema="ClientAttributes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="ClientAttributes" elementFormDefault="qualified">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践  
<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践  
<xsd:element name="ClientAttributes">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    
<xsd:complexType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践      
<xsd:sequence>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        
<xsd:element name="Age" type="sqltypes:int" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        
<xsd:element name="Weight">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践          
<xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            
<xsd:restriction base="sqltypes:numeric">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践              
<xsd:totalDigits value="10" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践              
<xsd:fractionDigits value="2" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            
</xsd:restriction>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践          
</xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        
</xsd:element>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        
<xsd:element name="Handed">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践          
<xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            
<xsd:restriction base="sqltypes:varchar" sqltypes:localeId="2052" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践              
<xsd:maxLength value="5" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            
</xsd:restriction>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践          
</xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        
</xsd:element>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        
<xsd:element name="QuitDate" type="sqltypes:datetime" minOccurs="0" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        
<xsd:element name="HasInsurance" type="sqltypes:bit" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践      
</xsd:sequence>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    
</xsd:complexType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践  
</xsd:element>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
</xsd:schema>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践-- 手工加入 <xsd:restriction> 标签
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
SET @mySchema = 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    
'<xsd:schema xmlns:schema="ClientAttributes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践             xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践             targetNamespace="ClientAttributes" elementFormDefault="qualified">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践             schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    <xsd:element name="ClientAttributes">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        <xsd:complexType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            <xsd:sequence>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <xsd:element name="Age" >
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                    <xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                        <xsd:restriction base="sqltypes:int">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                            <xsd:minInclusive value="0" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                        </xsd:restriction>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                    </xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                </xsd:element>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <xsd:element name="Weight">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                    <xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                        <xsd:restriction base="sqltypes:numeric">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                            <xsd:totalDigits value="10" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                            <xsd:fractionDigits value="2" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                            <xsd:minExclusive value="0" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                        </xsd:restriction>                        
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                    </xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                </xsd:element>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <xsd:element name="Handed">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                    <xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                        <xsd:restriction base="sqltypes:varchar" sqltypes:localeId="1060" 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                                   sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                            <xsd:maxLength value="5" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                            <xsd:pattern value="left|right"/>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                        </xsd:restriction>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                    </xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                </xsd:element>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <xsd:element name="QuitDate" minOccurs="0">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                    <xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                        <xsd:restriction base="sqltypes:varchar" sqltypes:localeId="1060" 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                                        sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                            <xsd:maxLength value="24" />                            
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                            <xsd:pattern value="\d\d\d\d-?\d\d-?\d\d \d\d:\d\d:\d\d(:\d{3})?" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                        </xsd:restriction>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                    </xsd:simpleType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                </xsd:element>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <xsd:element name="HasInsurance" type="sqltypes:bit" />
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            </xsd:sequence>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践        </xsd:complexType>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    </xsd:element>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践</xsd:schema>
'
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践-- 创建SCHEMA COLLECTION 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
CREATE XML SCHEMA COLLECTION ClientAttributesSchema AS @mySchema
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
go
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
-- 删除临时表
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
drop table ClientAttributes 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
go
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
IF OBJECT_ID('Client'IS NOT NULL
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    
drop table Client
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
-- 创建使用此xml类型的数据表
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
CREATE TABLE Client
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践(
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    ClientID 
INT NOT NULL PRIMARY KEY
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践  , FirstName 
VARCHAR(50NOT NULL
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践  , LastName 
VARCHAR(50NOT NULL
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践  , AttribXML xml(ClientAttributesSchema) 
-- xml column with schema
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践

Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
go
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践-- 加入函数到ClientAttributes命名空间以验证输入
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
IF OBJECT_ID('dbo.ClientAttributeValuesValidation'IS NOT NULL
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    
drop function dbo.ClientAttributeValuesValidation
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
go
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
CREATE FUNCTION dbo.ClientAttributeValuesValidation(@chkcol xml)
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践 
RETURNS nvarchar(4000)
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
AS
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
BEGIN
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践    
RETURN @chkcol.value('namespace-uri((/*)[1])','nvarchar(4000)')
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
END
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
GO
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践-- 添加此验证到数据表
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
ALTER TABLE Client WITH NOCHECK ADD CONSTRAINT chk_ClientAttributeValueValidation
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践 
CHECK (dbo.ClientAttributeValuesValidation(AttribXML) = 'ClientAttributes');
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
GO
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践-- 测试数据
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
INSERT INTO Client (ClientID, FirstName, LastName, AttribXML) 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
SELECT 1'First Name 1''Last Name 1',
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            N
'<ClientAttributes xmlns="ClientAttributes">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <Age>22</Age>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <Weight>10.2</Weight>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <Handed>left</Handed>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <QuitDate>2006-10-01 00:00:00</QuitDate>                
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <HasInsurance>1</HasInsurance>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            </ClientAttributes>
'
-- 测试数据 日期格式不同
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
INSERT INTO Client (ClientID, FirstName, LastName, AttribXML) 
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践
SELECT 2'First Name 2''Last Name 3',
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            N
'<ClientAttributes xmlns="ClientAttributes">
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <Age>22</Age>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <Weight>10.2</Weight>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <Handed>left</Handed>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <QuitDate>20061001 00:00:00</QuitDate>                
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践                <HasInsurance>1</HasInsurance>
Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践            </ClientAttributes>
'
-- 日期列为null
INSERT INTO Client (ClientID, FirstName, LastName, AttribXML)
SELECT 3, 'First Name 3', 'Last Name 3',
            N
'<ClientAttributes xmlns="ClientAttributes">
                <Age>23</Age>
                <Weight>10.2</Weight>
                <Handed>right</Handed>
                <HasInsurance>1</HasInsurance>
            </ClientAttributes>'

-- Handed 字段数值不满足条件,此语句将失败
INSERT INTO Client (ClientID, FirstName, LastName, AttribXML)
SELECT 4, 'First Name 4', 'Last Name 4',
            N'<ClientAttributes xmlns="ClientAttributes">
                <Age>1</Age>
                <Weight>1</Weight>
                <Handed>ffdg</Handed>
                <QuitDate>20061001 00:00:00</QuitDate>
                <HasInsurance>1</HasInsurance>
            </ClientAttributes>'



-- Schema collection info
SELECT    XSC.*
FROM    sys.xml_schema_collections XSC
WHERE    XSC.name = 'ClientAttributesSchema'
-- Schema collection namespaces info
SELECT    *
FROM    sys.xml_schema_collections XSC
        JOIN sys.xml_schema_namespaces XSN
                on XSC.xml_collection_id = XSN.xml_collection_id
WHERE    XSC.name = 'ClientAttributesSchema'
-- Schema collection Components info
SELECT    *
FROM    sys.xml_schema_collections XSC
        JOIN sys.xml_schema_components XSM
                on XSC.xml_collection_id = XSM.xml_collection_id
WHERE    XSC.name = 'ClientAttributesSchema'

Sql Server 2005 xml datatype Entity-Attribute-Value (EAV) model 实践

相关文章:

  • 2022-12-23
  • 2021-11-28
  • 2022-02-14
  • 2021-08-28
  • 2021-12-31
猜你喜欢
  • 2021-09-16
  • 2022-02-01
  • 2021-11-13
  • 2022-02-07
  • 2022-12-23
  • 2022-01-02
相关资源
相似解决方案