Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Syntaxe incorrecte près du mot-clé 'current_timestamp' - Mais seulement sur une base de données

Vérifiez le niveau de compatibilité de la base de données (il n'était pas clair à 100 % si le problème se produisait dans DB1 ou lors de l'appel de la fonction dans DB1).

Je parie que le niveau de compatibilité est de 80 dans la base de données présentant le problème ; SQL Server 2000 n'autorisait pas le passage direct des fonctions aux UDF de cette façon (et nous rencontrons le même problème en appelant certaines des fonctions de gestion dynamique si le niveau de compatibilité est 80 - voir ce billet de blog et les commentaires ). Cette base de données doit avoir été restaurée ou attachée après avoir été sauvegardée ou détachée de 2000. Ou après avoir été mise à niveau depuis 2000. Vous pouvez vérifier la compatibilité actuelle de cette façon :

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

Si vous trouvez qu'il est < 100, vous pouvez dire :

ALTER DATABASE DB1 SET COMPATIBILITY_LEVEL = 100;

Mais vous ne devez le faire que si vous savez que la compatibilité inférieure n'est pas nécessaire pour une autre raison - et vous devez valider sur un système de test que la base de données fonctionne comme prévu sous le nouveau niveau de compatibilité. Si vous rencontrez des problèmes, vous pouvez toujours le modifier, mais il vaut mieux être préparé.

Si vous ne voulez pas jouer avec le niveau de compatibilité, vous pouvez modifier légèrement votre logique.

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