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

Forkert syntaks nær søgeordet 'current_timestamp' - men kun på én database

Tjek databasens kompatibilitetsniveau (det var ikke 100 % klart, om problemet opstod i DB1, eller når funktionen blev kaldt i DB1).

Jeg vil vædde på, at kompatibilitetsniveauet er 80 i den database, der udviser problemet; SQL Server 2000 tillod ikke, at funktioner blev sendt direkte til UDF'er på den måde (og vi har det samme problem med at kalde nogle af de dynamiske administrationsfunktioner, hvis compat-niveauet er 80 - se dette blogindlæg og kommentarerne ). Denne database skal være blevet gendannet eller vedhæftet efter at være blevet sikkerhedskopieret eller frakoblet fra 2000. Eller efter at være blevet opgraderet fra 2000. Du kan kontrollere den aktuelle kompatibilitet på denne måde:

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

Hvis du finder det er <100, kan du sige:

ALTER DATABASE DB1 SET COMPATIBILITY_LEVEL = 100;

Men du bør kun gøre det, hvis du ved, at den lavere kompatibilitet ikke er nødvendig af en anden grund - og du bør validere på et testsystem, at databasen fungerer som forventet under det nye compat-niveau. Hvis du har problemer, kan du altid ændre det tilbage, men det er bedre at være forberedt.

Hvis du ikke vil rode med kompatibilitetsniveauet, kan du ændre din logik lidt.

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



  1. Sådan udføres en rå forespørgsel med returnering i sqlalchemy

  2. MySQL - Få de første 3 kommaseparerede værdier

  3. Ændring af tidszone efter tilslutning til database ved hjælp af set time_zone =...

  4. InnoDB SELECT ... FOR UPDATE-sætning låser alle rækker i en tabel