Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se:SQL Server
A especificação de W3C permite que erros de tipo ocorram estática ou dinamicamente, e define erros de tipo, dinâmicos e estáticos.
Compilação e tratamento de erros
Os erros de compilação são retornados de expressões e XML DML instruções Xquery sintaticamente incorretas. A fase de compilação verifica a exatidão do tipo estático das expressões XQuery e instruções DML, e usa esquemas XML para inferências de tipo para XML digitado. Erros do tipo estático ocorrem se uma expressão puder falhar no tempo de execução em razão de uma violação de segurança de tipo. Os exemplos de erro estático são: adição de uma cadeia de caracteres a um número inteiro e consulta de um nó inexistente para dados digitados.
Como uma divergência do padrão de W3C, os erros em tempo de execução Xquery são convertidos em sequências vazias. Essas sequências podem se propagar como XML vazio ou NULL para o resultado da consulta, dependendo do contexto de invocação.
Uma conversão explícita para o tipo correto permite aos usuários solucionar erros estáticos, embora erros de tempo de execução lançados sejam transformados em sequências vazias.
Observação
Analisando erros gerados pelo analisador XQuery (como erros de sintaxe no XML referenciado como parte do método de tipo de dados XML, por exemplo), anule a transação ativa, independentemente da configuração de XACT_ABORT da sessão atual.
Erros estáticos
Os erros estáticos são retornados usando o mecanismo de erro Transact-SQL. No SQL Server, os erros do tipo XQuery são retornados estaticamente. Para obter mais informações, consulte XQuery e tipagem estática.
Erros dinâmicos
No XQuery, a maioria dos erros dinâmicos são mapeados para uma sequência vazia ("()"). Entretanto, estas são as duas exceções: condições de estouro nas funções de agregação do XQuery e validação de erros XML-DML. A maioria dos erros dinâmicos é mapeada para uma sequência vazia. Caso contrário, a execução de consulta que aproveita os índices XML pode gerar erros inesperados. Portanto, para fornecer uma execução eficiente sem gerar erros inesperados, o Mecanismo de Banco de Dados do SQL Server mapeia erros dinâmicos para ().
Frequentemente, na situação em que o erro dinâmico ocorreria dentro de um predicado, não gerar o erro não está alterando a semântica, porque () é mapeado para False. No entanto, em alguns casos, retornar () em vez de um erro dinâmico pode causar resultados inesperados. Os exemplos a seguir ilustram isso.
Exemplo: usando a função avg() com uma cadeia de caracteres
No exemplo a seguir, a função Avg é chamada para calcular a média dos três valores. Um desses valores é uma cadeia de caracteres. Como a instância XML nesse caso não é tipada, todos os dados nela são de tipo atômico não tipado. A função avg() primeiro converte esses valores em xs:double antes de calcular a média. No entanto, "Hello"o valor não pode ser convertido em xs:double e cria um erro dinâmico. Nesse caso, em vez de retornar um erro dinâmico, a conversão de "Hello" para xs:double causa uma sequência vazia. A função avg() ignora esse valor, calcula a média dos outros dois valores e retorna 150.
DECLARE @x xml
SET @x=N'<root xmlns:myNS="test">
<a>100</a>
<b>200</b>
<c>Hello</c>
</root>'
SELECT @x.query('avg(//*)')
Exemplo: Usando a função not
Quando você usa a função Not em um predicado, por exemplo, /SomeNode[not(Expression)]e a expressão causa um erro dinâmico, uma sequência vazia será retornada em vez de um erro. Aplicar not() à sequência vazia retorna True, em vez de um erro.
Exemplo: lançando uma cadeia de caracteres
No exemplo a seguir, a cadeia de caracteres literal "NaN" é convertida em xs:string, depois em xs:double. O resultado é um conjunto de linhas vazio. Embora a cadeia de caracteres "NaN" não possa ser convertida com êxito em xs:double, isso não pode ser determinado até o runtime porque a cadeia de caracteres é convertida pela primeira vez em xs:string.
DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double(xs:string("NaN")) ')
GO
Neste exemplo, contudo, acontece um erro de tipo estático.
DECLARE @x XML
SET @x = ''
SELECT @x.query(' xs:double("NaN") ')
GO
Limitações de implementação
Não há suporte para a função fn:error( ).