2011-04-11 11 views
9

Entendí que establecer una base de datos en un COMPATIBILITY_LEVEL anterior a su versión original impedía el uso de características. Sin embargo, este no parece ser el caso. Sea testigo de la siguiente secuencia de comandos SQL:Comprender COMPATIBILITY_LEVEL en SQL Server

CREATE DATABASE Foo 
GO 
USE Foo 
GO 
ALTER DATABASE Foo SET COMPATIBILITY_LEVEL = 80 
GO 

CREATE TABLE Bar 
(
    Id UNIQUEIDENTIFIER NOT NULL, 
    TestNvcMax NVARCHAR (MAX) NOT NULL, -- Arrived in SQL 2005 
    TestDateTime2 DATETIME2 (7) NOT NULL -- Arrived in SQL 2008 
) 
GO 

Pero esta tabla crea perfectamente, ¿alguna idea? Yo hubiera pensado algún tipo de mensaje de error o advertencia habría sido apropiado

+1

Se produce el mismo fenómeno con la sintaxis 'select ... offset ... fetch' que corre bien bajo un nivel de compatibilidad 100 (2008) en SQL Server 2012, mientras que esto se introdujo en 2012. Realmente estaba teniendo problemas suposiciones sobre qué hace el nivel de compatibilidad. –

Respuesta

8

Aquí se puede leer acerca de las diferencias entre el nivel de compatibilidad 80, 90 y 100. ALTER DATABASE Compatibility Level

Aparentemente nuevos tipos de datos no se ve afectada. Creo que el nivel de compatibilidad está ahí para hacer que SQL Server se "comporte" como la versión anterior, no le impide hacer cosas nuevas y sofisticadas.

+0

"Al parecer, los nuevos tipos de datos no se ven afectados" Para ser justos, no dice explícitamente que (había leído ese artículo antes de esta publicación), pero todavía creo que debería funcionar como VS cuando selecciono una versión anterior de el .NET Framework. Lo nuevo simplemente no está disponible ... – noonand

+0

Otorgando una respuesta a Mikael ya que esto parece estar más cerca de lo que realmente está sucediendo. – noonand

8

BOL dice:

nivel de compatibilidad proporciona sólo compatibilidad parcial con versiones anteriores de SQL Server.

también:

nueva funcionalidad podría trabajar bajo niveles de compatibilidad mayores, pero SET opciones podrían requerir ajustes.

Creo que es tu caso.

+0

"pero las opciones de SET pueden requerir ajustes". No estoy ESTABLECIENDO nada. Todo lo que hago es creación de tabla y sproc, que falla cuando intento ejecutar los scripts en la máquina SQL 2000 de destino ... – noonand

3

Entiendo que esta es una publicación anterior, pero para cualquier otra persona que termine aquí como lo hice, siempre hay más información útil.

También podría ser que la nueva compatibilidad no surtiera efecto antes de ejecutar la sentencia create table.

"La nueva configuración de compatibilidad para una base de datos entra en vigencia cuando se emite una base de datos USE o se procesa un nuevo inicio de sesión con esa base de datos como base de datos predeterminada". (https://msdn.microsoft.com/en-us/library/bb510680.aspx)