Por que o novo T-SQL do SQL Server 2008 funciona no banco de dados no modo de compatibilidade 80?
-
26-09-2019 - |
Pergunta
Experimentando novos recursos do T-SQL, encontrei um quebra-cabeça. Aqui está uma nova sintaxe suportada pelo SQL 2008 e eu esperaria que funcionasse em bancos de dados definidos para o modo de compatibilidade 100 (ou seja, 2008) e não funcione no modo Compat 80 (ou seja, 2000). No entanto, isso funciona para um conjunto de banco de dados para o modo de compatibilidade do SQL Server 2000 em uma instância SQL 2008 da edição padrão:
use MDS -- this db is compat mode 80
go
CREATE TABLE dbo.Employees
(
Name VARCHAR(50) NULL,
Email VARCHAR(50) NULL,
Salary money NULL
)
INSERT INTO dbo.Employees(Name, Email, Salary)
VALUES('Scott', 'scott@example.com', 50000.00),
('Jisun', 'jisun@example.com', 225000.00),
('Alice', 'al@example.com', 75000.00),
('Sam', 'sam@example.com', 45000.00)
SELECT * FROM dbo.Employees
drop table dbo.Employees
Solução
A configuração do modo de compatibilidade é usada para controlar certos aspectos relativamente obscuros (IMHO) do comportamento do mecanismo de banco de dados. Ele não bloqueia ou impede que o uso de extensões para o idioma T-SQL seja usado em bancos de dados migrados de versões anteriores-por exemplo, um banco de dados apoiado no SQL 2000 e restaurado no SQL 2008 suportará CTEs e o novo Multi- Declarações de inserção de valor.
Os detalhes reais do que é controlado pelo modo de compatibilidade do banco de dados estão enterrados em vários artigos em livros on -line; isto é um bom ponto de partida para pesquisar isso.
Outras dicas
Eu notei isso também e encontrei Esta declaração no MSDN:
Define determinados comportamentos do banco de dados como compatíveis com a versão especificada do SQL Server.
O modo de compatibilidade afeta "certos" comportamentos, e nem todos os comportamentos. Veja o Alter documentação do banco de dados para detalhes.
Não vejo como isso pode funcionar no modo Compat 80. Tente adicionar esta linha antes de criar sua tabela:
sp_dbcmptlevel 'MDS'
Ele retorna 80?