Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Sintassi errata vicino alla parola chiave 'current_timestamp' - Ma solo su un database

Verificare il livello di compatibilità del database (non era chiaro al 100% se il problema si stava verificando in DB1 o durante la chiamata della funzione in DB1).

Scommetto che il livello di compatibilità è 80 in qualsiasi database stia esibendo il problema; SQL Server 2000 non consentiva il passaggio di funzioni direttamente alle UDF in questo modo (e abbiamo lo stesso problema a chiamare alcune delle funzioni di gestione dinamica se il livello di compatibilità è 80 - vedere questo post del blog e commenti ). Questo database deve essere stato ripristinato o allegato dopo essere stato sottoposto a backup o scollegato dal 2000. O dopo essere stato aggiornato dal 2000. Puoi verificare la compatibilità attuale in questo modo:

SELECT name, compatibility_level FROM sys.databases WHERE name = 'DB1';

Se trovi che è <100, puoi dire:

ALTER DATABASE DB1 SET COMPATIBILITY_LEVEL = 100;

Ma dovresti farlo solo se sai che la compatibilità inferiore non è necessaria per qualche altro motivo e dovresti convalidare su un sistema di test che il database funzioni come previsto con il nuovo livello di compatibilità. In caso di problemi, puoi sempre ripristinarlo, ma è meglio essere preparati.

Se non vuoi alterare il livello di compatibilità, puoi cambiare leggermente la tua logica.

DECLARE @now DATETIME = CURRENT_TIMESTAMP;
SELECT * FROM dbo.getAllStatusesForGridProjectsByMaximumDate(@now);