Existe uma maneira de declarar XSD schema
como variável dentro de uma construção: DECLARE @xml XML(Books)
?
Preciso fazer uma validação rápida do XML
uso do XSD
esquema que é declarado como variável. Acho que não tem jeito, mas tenho que perguntar.
Se alguém puder propor alguma solução alternativa, também será muito útil.
Eu não acho que isso seja possível usando o T-SQL, no entanto, você pode conseguir o que precisa usando o assembly C# e .NET CLR.
Passos
public static
método que fará o trabalho para você.Método estático público para validar um documento XML em um XSD
Adicionar assembly CLR ao Microsoft SQL Server
Crie o assembly e copie o arquivo DLL de saída para um local acessível pela instância do SQL Server. Em seguida, execute este comando para registrar um assembly CLR em um banco de dados:
Crie uma função escalar que chamará XmlValidate
Use fn_ValidateXsd
Eu recomendo começar com o código na função que você já tem para fazer isso a partir de uma Xml Schema Collection, conforme mostrado nesta pergunta:
Erro SQL 2012 CLR: "A transação de contexto que estava ativa antes de inserir ..."?
Você pode criar uma segunda função que é quase a mesma, mas usa o próprio XSD em vez do nome da coleção de esquemas e, em seguida, pode apenas fazer a validação da mesma maneira, mas sem precisar obtê-la do banco de dados. E, como esta função está fazendo qualquer acesso a dados para obter o XSD, ela pode ser marcada como
IsDeterministic=true
o que permitirá que ela participe de planos paralelos (ou, dizendo de outra forma, impedirá que a função force um plano serial).Desta forma, você tem uma abordagem consistente para a avaliação, é apenas a fonte do XSD que é diferente. E tanto esta função quanto a função em sua outra pergunta (link acima) podem estar no mesmo
SAFE
Assembly. Não vejo razão para usar umUNSAFE
Assembly para fazer isso.