Perché la nuova T-SQL 2008 lavori SQL Server sul database in modalità di compatibilità 80?
-
26-09-2019 - |
Domanda
La sperimentazione con le nuove caratteristiche di T-SQL, ho incontrato un puzzle. Ecco qualche nuova sintassi supportata da SQL 2008 e mi aspetto che a lavorare su basi di dati impostati per la modalità di compatibilità 100 (vale a dire 2008) e non il lavoro per la modalità compat 80 (vale a dire 2000). Eppure, questo funziona per un set base di dati per la modalità di compatibilità SQL Server 2000 su un'istanza di SQL 2008 Standard edition:
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
Soluzione
L'impostazione della modalità di compatibilità è usato per controllare alcuni aspetti (secondo me) relativamente oscuri databae comportamento del motore. Esso non blocca o impedisce l'uso di estensioni al linguaggio T-SQL da essere utilizzato su basi di dati migrati da versioni precedenti - per esempio, un database eseguito il backup da SQL 2000 e ripristinato in SQL 2008 sosterrà CTE ed il nuovo multi dichiarazioni valore INSERISCI.
I dettagli reali di ciò che è controllata dalla modalità di compatibilità del database sono sepolti in diversi articoli nella documentazione in linea; questo è un buon punto di partenza per la ricerca di questo.
Altri suggerimenti
ho notato anche questo, e ha trovato questa dichiarazione su MSDN :
Imposta certi comportamenti database da compatibile con la versione specificata di SQL Server.
La modalità di compatibilità colpisce "certi" comportamenti, e non tutti i comportamenti. Vedere la ALTER DATABASE documentazione per i dettagli.
non vedo come questo possa funzionare in modalità compat 80. Prova ad aggiungere questa riga prima di creare il tuo tavolo:
sp_dbcmptlevel 'MDS'
Ha ritorno 80?