Pregunta

La experimentación con nuevas características de T-SQL, me he encontrado un rompecabezas. Aquí hay alguna nueva sintaxis soportada por SQL 2008 y me gustaría esperar que funcione en las bases de datos establecidas para el modo de compatibilidad al 100 (es decir, 2008) y no trabajo para el modo compat 80 (es decir, 2000). Sin embargo, esto funciona para un conjunto de bases de datos para el modo de compatibilidad de SQL Server 2000 en una instancia de SQL 2008 de la edición estándar:

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
¿Fue útil?

Solución

La configuración de modo de compatibilidad se utiliza para controlar ciertos (francamente) aspectos relativamente oscuros de databae comportamiento del motor. No bloquea o impide la utilización de extensiones al lenguaje T-SQL que se utilicen en bases de datos migradas desde versiones anteriores - por ejemplo, una base de datos SQL copia de seguridad desde el año 2000 y restaurado en SQL 2008 respaldarán CTE y el nuevo multi- declaraciones valor de inserción.

Los detalles reales de lo que está controlada por el modo de compatibilidad de base de datos están enterrados en varios artículos en los libros en pantalla; este está empezando un lugar bueno para la investigación de este.

Otros consejos

Me di cuenta de esto también, y se encontró esta declaración en MSDN :

  

Establece ciertos comportamientos de bases de datos que sean   compatible con la versión especificada   de SQL Server.

El modo de compatibilidad afecta a "ciertos" comportamientos, y no todos los comportamientos. Vea la ALTER DATABASE documentación para más detalles.

No veo cómo esto podría funcionar en el modo compat 80. Trate de añadir esta línea antes de crear la tabla:

sp_dbcmptlevel 'MDS'

¿Vuelve 80?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top