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.
Esta seção descreve problemas conhecidos relacionados ao Provedor de Dados do .NET Framework para SQL Server (SqlClient).
Espaço à direita em funções de cadeia de caracteres
O SQL Server ignora espaços finais em valores de cadeia de caracteres. Portanto, passe espaço à direita na cadeia de caracteres pode levar a resultados imprevisíveis, mesmo falhas.
Se você precisa ter espaço para a direita na cadeia de caracteres, você deve considerar acrescentar um caractere de espaço em branco no final, de modo que o SQL Server não corte a cadeia de caracteres. Se o espaço à direita não são necessários, devem ser quebrados antes de serem passados abaixo do pipeline de consulta.
Função DIREITA
Se um valor que não seja null for passado como primeiro argumento e 0 for passado como segundo argumento para RIGHT(nvarchar(max), 0) ou RIGHT(varchar(max), 0), um valor NULL será retornado em vez de uma cadeia de caracteres empty.
A CRUZ e EXTERIORES APLICAM operadores
Os operadores CROSS e OUTER APPLY foram introduzidos no SQL Server 2005. Em alguns casos o pipeline de consulta pode gerar uma declaração de Transact-SQL que contém a CRUZ SE APLICASSE e/ou OUTER APPLY operadores. Como alguns provedores de back-end, incluindo versões do SQL Server anteriores ao SQL Server 2005, não dão suporte a esses operadores, essas consultas não podem ser executadas nesses provedores de back-end.
A seguir estão alguns cenários típicos que podem resultar na presença de CRUZ SE APLICAM e/ou OUTER APPLY operadores na consulta de saída:
Um subconsulta correlacionado com paginação.
AnyElementsobre subpropriedades uma consulta correlacionada, ou sobre uma coleção gerada por navegação.Consultas LINQ que usam métodos de agrupamento que aceitam um seletor de elemento.
Uma consulta em que uma CRUZ SE APLICA ou OUTER APPLY são especificados explicitamente
Uma consulta que tenha uma compilação de DEREF sobre uma compilação de referência.
Operador SKIP
Se você estiver usando o SQL Server 2000, usar SKIP com ORDER BY em colunas não chave poderá retornar resultados incorretos. Mais linhas do que o número especificado podem ser puladas se a coluna não-chave contiver dados duplicados. Isso ocorre devido à forma como SKIP é traduzido para o SQL Server 2000. Por exemplo, na consulta a seguir, mais de cinco linhas poderão ser ignoradas se E.NonKeyColumn houver valores duplicados:
SELECT [E] FROM Container.EntitySet AS [E] ORDER BY [E].[NonKeyColumn] DESC SKIP 5L
Selecionando a versão correta do SQL Server
O Entity Framework executa a consulta Transact-SQL baseada na versão do SQL Server especificada no atributo ProviderManifestToken do elemento Schema no arquivo de modelo de armazenamento (.ssdl). Essa versão pode ser diferente da versão do SQL Server real ao qual você está conectado. Por exemplo, se você estiver usando o SQL Server 2005, mas seu ProviderManifestToken atributo estiver definido como 2008, a consulta Transact-SQL gerada poderá não ser executada no servidor. Por exemplo, uma consulta que usa os novos tipos de data e hora que foram introduzidos no SQL Server 2008 não será executada em versões anteriores do SQL Server. Se você estiver usando o SQL Server 2005, mas seu ProviderManifestToken atributo estiver definido como 2000, a consulta Transact-SQL gerada poderá ser menos otimizada ou você poderá obter uma exceção que diz que a consulta não tem suporte. Para obter mais informações, consulte a CRUZ e OUTER APLICA a seção dos operadores, anteriormente neste tópico.
Determinados comportamentos de banco de dados dependem do nível de compatibilidade definido para o banco de dados. Se o ProviderManifestToken atributo estiver definido como 2005 e sua versão do SQL Server for 2005, mas o nível de compatibilidade de um banco de dados estiver definido como "80" (SQL Server 2000), o Transact-SQL gerado terá como destino o SQL Server 2005, mas talvez não seja executado conforme o esperado devido à configuração de nível de compatibilidade. Por exemplo, você poderá perder informações de ordenação se um nome de coluna na lista ORDER BY corresponder a um nome de coluna no seletor.
Consultas aninhadas na projeção
Consultas aninhadas em uma cláusula de projeção podem obter convertido em consultas de produto cartesiano no servidor. Em alguns servidores back-end, incluindo o SQL Server, isso pode fazer com que a tabela TempDB fique bastante grande. Isso pode diminuir o desempenho do servidor.
Veja a seguir um exemplo de uma consulta aninhada em uma cláusula de projeção:
SELECT c, (SELECT c, (SELECT c FROM AdventureWorksModel.Vendor AS c ) As Inner2 FROM AdventureWorksModel.JobCandidate AS c ) As Inner1 FROM AdventureWorksModel.EmployeeDepartmentHistory AS c
Valores de Identidade GUID Gerados pelo Servidor
O Entity Framework dá suporte a valores de identidade de tipo GUID gerados pelo servidor, mas o provedor deve dar suporte ao retorno do valor de identidade gerado pelo servidor depois que uma linha foi inserida. A partir do SQL Server 2005, você pode retornar o tipo GUID gerado pelo servidor em um banco de dados do SQL Server por meio da cláusula OUTPUT.