Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Falsche Syntax in der Nähe des Schlüsselworts „current_timestamp“ – aber nur auf einer Datenbank

Überprüfen Sie den Kompatibilitätsgrad der Datenbank (es war nicht 100 % klar, ob das Problem in DB1 oder beim Aufruf der Funktion in DB1 auftrat).

Ich wette, der Kompatibilitätsgrad ist 80 in welcher Datenbank auch immer das Problem auftritt; SQL Server 2000 erlaubte es nicht, Funktionen auf diese Weise direkt an UDFs zu übergeben (und wir haben das gleiche Problem beim Aufrufen einiger dynamischer Verwaltungsfunktionen, wenn die Kompatibilitätsebene 80 ist - siehe dieser Blogbeitrag und die Kommentare ). Diese Datenbank muss nach dem Sichern oder Trennen von 2000 wiederhergestellt oder angehängt worden sein. Oder nach einem Upgrade von 2000. Sie können die aktuelle Kompatibilität folgendermaßen überprüfen:

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

Wenn Sie feststellen, dass es <100 ist, können Sie sagen:

ALTER DATABASE DB1 SET COMPATIBILITY_LEVEL = 100;

Dies sollten Sie jedoch nur tun, wenn Sie wissen, dass die niedrigere Kompatibilität aus einem anderen Grund nicht erforderlich ist - und Sie sollten auf einem Testsystem validieren, dass die Datenbank unter der neuen Kompatibilitätsstufe wie erwartet funktioniert. Wenn Sie Probleme haben, können Sie es jederzeit wieder ändern, aber es ist besser, vorbereitet zu sein.

Wenn Sie nicht mit dem Kompatibilitätsgrad herumspielen möchten, können Sie Ihre Logik leicht ändern.

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