using System; using System.IO; using System.Xml; using System.Xml.Serialization; }
-- 创建临时表 IFOBJECT_ID('ClientAttributes') ISNOTNULL droptable ClientAttributes go -- problem with datetime datatype look above URL -- create a table with desired attributes createtable ClientAttributes ( Age intnotNULLcheck( Age >-1) , Weight numeric(10,2) notNULLcheck( Weight >0), Handed varchar(5) notnullcheck( Handed in ('left', 'right')), QuitDate datetimenull, HasInsurance bitnotnulldefault(1) ) go
-- 创建 XML schema 并加上 client attributes DECLARE@mySchema xml -- this is the default schema that gets created from the ClientAttributes table -- however the check constraints aren't converted SET@mySchema= (SELECT*FROM ClientAttributes FOR XML AUTO, ELEMENTS, XMLSCHEMA('ClientAttributes')) -- see the schema that gets auto-created select@mySchema
-- 创建SCHEMA COLLECTION CREATE XML SCHEMA COLLECTION ClientAttributesSchema AS@mySchema go -- 删除临时表 droptable ClientAttributes go IFOBJECT_ID('Client') ISNOTNULL droptable Client -- 创建使用此xml类型的数据表 CREATETABLE Client ( ClientID INTNOTNULLPRIMARYKEY , FirstName VARCHAR(50) NOTNULL , LastName VARCHAR(50) NOTNULL , AttribXML xml(ClientAttributesSchema) -- xml column with schema ) go
-- 加入函数到ClientAttributes命名空间以验证输入 IFOBJECT_ID('dbo.ClientAttributeValuesValidation') ISNOTNULL dropfunction dbo.ClientAttributeValuesValidation go CREATEFUNCTION dbo.ClientAttributeValuesValidation(@chkcol xml) RETURNSnvarchar(4000) AS BEGIN RETURN@chkcol.value('namespace-uri((/*)[1])','nvarchar(4000)') END GO
-- 添加此验证到数据表 ALTERTABLE Client WITHNOCHECKADDCONSTRAINT chk_ClientAttributeValueValidation CHECK (dbo.ClientAttributeValuesValidation(AttribXML) ='ClientAttributes'); GO
-- 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'