Good article! One question did come to mind as I read it: would it be possible to modify your method to use a single XML schema for validation against multiple namespaces:
DROP XML SCHEMA COLLECTION stat;
GO
CREATE XML SCHEMA COLLECTION stat
AS
'<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="leo:stat:a" xmlns="leo:stat:a">
<xs:element name="statroot">
<xs:complexType>
<xs:sequence>
<xs:element name="statrecord" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="companyid" type="xs:integer" />
<xs:element name="prodno" type="xs:string" />
<xs:element name="userid" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema> ';
GO
ALTER XML SCHEMA COLLECTION stat
ADD '<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="leo:stat:b" xmlns="leo:stat:b">
<xs:element name="statroot">
<xs:complexType>
<xs:sequence>
<xs:element name="statrecord" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="co" type="xs:integer" />
<xs:element name="prod" type="xs:string" />
<xs:element name="uid" type="xs:integer" />
<xs:element name="ext" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema> '
GO
declare @xmlvar1 xml (stat);
set @xmlvar1 = '<xs:statroot xmlns:xs="leo:stat:a">
<statrecord>
<companyid>6</companyid>
<prodno>prd12</prodno>
<userid>12345</userid>
</statrecord>
</xs:statroot>
<xs:statroot xmlns:xs="leo:stat:b">
<statrecord>
<co>6</co>
<prod>prd12</prod>
<uid>12345</uid>
<ext>Test</ext>
</statrecord>
</xs:statroot>'
This would require you to pass in the namespace qualifiers in your input XML, but might eliminate the need to pass the XML schema collection name.
Thanks!