A dica de hoje tem o objetivo de ilustrar e apresentar as diferenças existentes entre os Níveis de Compatibilidade 80(SQL Server 2000) e 90(SQL Server 2005).
No nível de compatibilidade 90, ocorremas alterações de comportamento a seguir.
Configuração |
Configuração |
Possibilidade |
||||
Para bloquear as dicas na cláusula FROM, a palavra-chave WITH é sempre opcional. |
Com algumas exceções, há suporte para dicas de tabela na cláusula FROM somente quando elas são especificadas com a palavra-chave WITH. Para obter mais informações, consulte FROM (Transact-SQL). |
Alta | ||||
Os operadores * = e = * para junção externa possuem suporte com uma mensagem de aviso. |
Esses operadores não têm suporte; a palavra-chave OUTER JOIN deve ser usada. |
Alta | ||||
Ao associar as referências de coluna na lista ORDER BY com as colunas definidas na lista SELECT, as ambiguidades de coluna são ignoradas e os prefixos de colunas, às vezes, são ignorados. Isso pode fazer o conjunto de resultados ser retornado em uma ordem inesperada. Por exemplo, uma cláusula ORDER BY SELECT c1 = Quando executada, o prefixo de coluna |
Erros são gerados em ambiguidades de coluna. Os prefixos de coluna, se houver, especificados em ORDER BY não são ignorados ao serem associados a uma coluna definida na lista SELECT. Considere a consulta a seguir. SELECT c1 = Quando executada, o prefixo de coluna |
Média | ||||
Em um INSERT SELECT de uma UNION de diferentes tipos de dados, cada ramificação UNION é convertida diretamente para o tipo de coluna de destino de INSERT. Mesmo que a união usada sozinha possa falhar por causa de conversões de tipos incompatíveis, INSERT SELECT faz com que UNION tenha êxito porque a ramificação para o tipo de resultado de UNION nunca é convertida. |
O tipo de resultado de UNION é derivado independentemente de INSERT SELECT. Cada ramificação de UNION é convertida para o tipo de resultado UNION e, em seguida, convertida para o tipo de coluna de destino de INSERT. Se houver tipos incompatíveis na UNION, a primeira conversão poderá causar um erro. Para executar no nível de compatibilidade 90, é necessário corrigir todas as uniões de tipos incompatíveis usadas em INSERT SELECT. |
Média | ||||
As operações de inserção e atualização em uma exibição possuem suporte incorreto em exibições que especificam a cláusula WITH CHECK OPTION quando a exibição ou uma exibição referenciada usa a cláusula TOP. |
Essas operações em uma exibição não possuem suporte em exibições que usam WITH CHECK OPTION quando a exibição ou uma exibição referenciada usa a cláusula TOP. |
Média | ||||
A UNION de uma coluna de comprimento variável e uma coluna de comprimento fixo produz uma coluna de comprimento fixo. |
A UNION de uma coluna de comprimento variável e uma coluna de comprimento fixo produz uma coluna de comprimento variável. |
Média | ||||
SET XACT_ABORT OFF é permitido em um gatilho. |
SET XACT_ABORT OFF não é permitido em um gatilho. |
Média | ||||
A cláusula FOR BROWSE é permitida (e ignorada) em exibições. |
A cláusula FOR BROWSE não é permitida em exibições. |
Média | ||||
Erros de domínio não são controlados por ANSI_WARNINGS. As configurações ARITHABORT são obedecidas, se ANSI_WARNINGS for definido como OFF e não houver nenhuma alteração em ARITHABORT. |
Erros de domínio também são controlados por ANSI_WARNINGS e são erros de severidade 16. Se ANSI_WARNINGS ou ARITHABORT forem ON, um erro será lançado em vez de retornar o valor NULL. Scripts de usuário que dependem de ARITHABORT ser definido como OFF podem ser divididos por essa alteração. |
Média | ||||
Se uma consulta de passagem em uma fonte de dados remota (OpenRowset ou OpenQuery) produzir colunas com nomes duplicados, os nomes de coluna duplicados serão ignorados a menos que as colunas sejam nomeadas explicitamente na consulta. |
Se uma consulta de passagem em uma fonte de dados remota (OpenRowset ou OpenQuery) produzir uma coluna com nomes de coluna duplicados, um erro será gerado. |
Baixa | ||||
Constantes de cadeia de caracteres e constantes varbinary maiores que 8.000 são tratadas como text, ntext ou image. |
As constantes de cadeia de caracteres e as constantes varbinary maiores que 8.000 são tratadas como tipo varchar(max) (ou nvarchar(max) e varbinary(max), respectivamente). Isso pode alterar o tipo de dados da tabela criada usando SELECT … INTO se a lista SELECT contiver tais expressões. |
Baixa | ||||
As comparações entre tipos numéricos (smallint, tinyint, int, bigint, numeric, decimal, smallmoney e money) são feitas convertendo o termo de comparação com a menor precedência na hierarquia de tipos com o tipo cuja precedência seja maior. |
Os valores de tipo numérico são comparados sem conversões. Isso melhora o desempenho. Entretanto, pode causar algumas alterações de comportamento, principalmente em casos nos quais a conversão causou exceções de estouro. |
Baixa | ||||
Funções de metadados internas que fazem argumentos de cadeia de caracteres truncarem a entrada se ela tiver mais que 4.000 caracteres. |
As funções de metadados internas irão gerar um erro se o truncamento resultar na perda de caracteres sem-espaço. |
Baixa | ||||
O conjunto de caracteres não permitidos em um identificador sem-aspas permanece inalterado. |
O analisador Transact-SQL oferece suporte ao padrão Unicode 3.2, que altera a classificação de caracteres para alguns caracteres internacionais que agora são proibidos em identificadores não delimitados. |
Baixa | ||||
SET ANSI_WARNINGS ON não substitui a configuração de SET ARITHABORT OFF para o caso de erros de domínio de ponto flutuante [ou seja, argumentos negativos para a função log()] Se ANSI_WARNINGS for ON mas ARITHABORT for OFF, os erros de domínio de ponto flutuante não causarão o encerramento da consulta. |
SET ANSI_WARNINGS ON substitui completamente a configuração ARITHABORT OFF. Os erros de domínio de ponto flutuante nesse caso farão a consulta ser encerrada. |
Baixa | ||||
Constantes não inteiras são permitidas (e ignoradas) na cláusula ORDER BY. |
As constantes não inteiras não são permitidas na cláusula ORDER BY. |
Baixa | ||||
A instrução SET vazia (sem nenhuma atribuição de opção SET) é permitida. |
A cláusula SET vazia não é permitida. | Baixa | ||||
O atributo IDENTITY não é derivado corretamente para colunas produzidas por uma tabela derivada. |
O atributo IDENTITY é derivado corretamente para colunas produzidas por tabelas derivadas. |
Baixa | ||||
A propriedade de nulidade de operadores aritméticos no tipo de dados de ponto flutuante sempre pode ser nula. |
A propriedade de nulidade de operadores aritméticos no tipo de dados de ponto flutuante será alterada para não nula caso as entradas sejam não nulas e ANSI_WARNINGS seja ON. |
Baixa | ||||
Na instrução INSERT … SELECT com UNION, os tipos produzidos pelos conjuntos de resultados individuais são todos convertidos no tipo de resultado de destino. |
Na instrução INSERT … SELECT com UNION, o tipo dominante das diversas ramificações é determinado, e os resultados são convertidos naquele tipo existente antes de serem convertidos no tipo de tabela de destino. |
Baixa | ||||
Na instrução SELECT … FOR XML, o hex(27) (o caractere ‘) e hex(22) (o caractere “) têm sempre a entidade definida, mesmo quando não é necessário. |
FOR XML tem a entidade definida como hex(27) e hex(22) somente quando necessário. Eles não têm a entidade definida nas seguintes situações:
|
Baixa | ||||
Em FOR XML, o valor de carimbo de data/hora é mapeado como um inteiro. |
Em FOR XML, o valor de carimbo de data/hora é mapeado como um valor binário. Para obter mais informações, consulte Suporte de |
Alta (se uma coluna timestamp for usada); caso contrário, Baixa |
||||
Em FOR XML e OPENXML, os caracteres Unicode (de 3 bytes) de intervalo grande em nomes são representados usando 8 posições. Por exemplo, usando 8 posições, FOR <a_x00010000_ c1=”1″ |
Em FOR XML e OPENXML, os caracteres Unicode (de 3 bytes) de intervalo grande em nomes são representados usando 6 posições. Por exemplo, usando 6 posições, FOR <a_x010000_ c1=”1″ /> |
Baixa | ||||
Em FOR XML, os mapeamentos de tabela derivados no modo AUTO são tratados de forma transparente. Por exemplo:
Quando o nível de compatibilidade <a a=”1″><b <a a=”2″><b |
Em FOR XML, os mapeamentos de tabela derivados no modo AUTO são tratados de forma opaca. Quando o nível de compatibilidade para AdventureWorks2008R2 <Test a=”1″ <Test a=”2″ |
Alta (se o modo FOR XML AUTO for aplicado em exibições); caso contrário, Baixa |
||||
A cadeia de caracteres para conversões de money oferecem suporte ao uso de um caractere de barra invertida (\) como símbolo de moeda somente nos idiomas japonês e coreano. |
O caractere de barra invertida (\) é aceito em toda a cadeia de caracteres para conversões de money em todos os idiomas. ISNUMERIC retorna verdadeiro quando \ é usada como um símbolo de moeda. Para bancos de dados em versões do |
Baixa | ||||
O resultado de um operador aritmético sempre pode ser nulo, mesmo que os operandos não possam ser nulos e ANSI_WARNINGS ou ARITHABORT sejam definidos como ON. |
Quando ANSI_WARNINGS ou ARITHABORT são definidos como ON, o resultado de um operador aritmético de ponto flutuante não poderá ser nulo se os dois operandos não puderem ser nulos. Essa alteração em nulidade pode causar falha
|
Baixa | ||||
Para funções internas que usam nvarchar como um parâmetro, se o valor fornecido for varchar, ele será convertido em nvarchar(4.000). No SQL Server 2000, se um valor maior for passado, ele será truncado silenciosamente. |
Para funções internas que usam nvarchar como um parâmetro, se o valor fornecido for varchar, ele ainda será convertido em nvarchar(4.000). Entretanto, se um valor maior for passado, o SQL Server 2008 irá gerar um erro. Para a execução com o nível de |
Baixa | ||||
Uma união de uma cadeia de caracteres de tamanho fixo (char, binary ou nchar) com uma cadeia de caracteres de comprimento variável (varchar, varbinary, nvarchar) retorna um resultado de tamanho fixo. |
A união de uma cadeia de caracteres de tamanho variável com uma cadeia de caracteres de tamanho fixo retorna uma cadeia de caracteres de tamanho variável. Para a execução com o nível de compatibilidade |
Baixa | ||||
Nomes de objeto contendo o caractere 0xFFFF são identificadores válidos. |
Nomes de objeto contendo o caractere 0xFFFF não são identificadores válidos e não são acessados. Para a execução com nível de |
Baixa | ||||
Em SELECT ISNUMERIC(‘<string>‘), as vírgulas incorporadas em <string> são significativas. Por exemplo, a consulta SELECT |
Em SELECT ISNUMERIC(‘<string>‘), as vírgulas incorporadas em <string> são ignoradas. Por exemplo, a consulta SELECT |
Baixa | ||||
Um sinal de dois-pontos (:) após de uma palavra-chave reservada em uma instrução Transact-SQL é ignorado. |
Um sinal de dois-pontos (:) após uma palavra-chave reservada em uma instrução Transact-SQL causa a falha da instrução. |
Baixa | ||||
Uma cláusula GROUP BY em uma subconsulta que faz referência a uma coluna da consulta externa é bem-sucedida. |
Uma cláusula GROUP BY em uma subconsulta que faz referência a uma coluna da consulta externa retorna um erro de acordo com o padrão SQL. |
Baixa |
Até mais.