Domanda

Sto spostando un'app da SQL Server 2008 a SQL Server Express, e tutto va bene, ma diverse procedure memorizzate dicono che ho un errore di sintassi.Ho guardato online e non ho trovato una risposta - ci sono tipi di sintassi supportati in SQL Server 2008 (standard) ma non in SQL Server 2012 Express?

È stato utile?

Soluzione

Immagino che ci sia una possibilità, se nel 2008 stavi utilizzando la modalità di compatibilità 2000 e le tue procedure memorizzate avevano un join esterni di vecchio stile:

SELECT o.name, c.name
FROM sys.objects AS o, sys.columns AS c
WHERE o.[object_id] *= c.[object_id];
.

Questa sintassi funziona in SQL Server 2000, ma da allora è stato deprecato. Nel 2005, 2008 e 2008 R2 potresti shoe-clact in se usi 80 modalità di compatibilità. A partire da SQL Server 2012, non è più possibile utilizzare la modalità Compat 80, quindi il codice sopra non funziona con:

.

Msg 102, Livello 15, stato 1, linea 3
Sintassi errata vicino '*='.

Nel 2008, avresti invece questo messaggio di errore:

.

MSG 4147, Livello 15, stato 1, linea 3
La query utilizza un join esterno non ansi Operatori ("*=" or "=*"). Per eseguire questa query senza modifiche, Si prega di impostare il livello di compatibilità per il database corrente su 80, utilizzando L'opzione Set Compatibility_level del database ALTER. È fortemente consigliato per riscrivere la query usando gli operatori dell'istorità esterni ANSI (a sinistra Iscriviti esterni, jet esterni destra). Nelle versioni future di SQL Server, Gli operatori di join non ansi non saranno supportati anche in Modalità di compatibilità all'indietro.

Ma se altera il database come suggerito nel messaggio di errore, funzionerebbe:

ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80;
.

Questo sembra un tratto. Ma senza alcune informazioni reali riguarda l'unica ipotesi che ho.

Altri suggerimenti

Ecco un Elenco di funzionalità deprecate in SQL Server 2012--Dai un'occhiata alla sezione T-SQL in particolare.È inoltre possibile utilizzare SSDT (STSDT Server Tools), creare una copia offline del DB e quindi impostare la versione Targeting su SQL Server 2012 - L'uscita mostrerebbe mostrare molte delle incompatibilità della sintassi tra le versioni.Ho scritto un blog su SSDT che potrebbe essere utile Qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top