SQL-Server-Problem: Incorrect Syntax '44446'
Die vom Upzising-Wizard des SQL Server erzeugten Trigger sind nicht kompatibel mit SQL Server 2012 und 2014.
- Dr. Holger Schwichtenberg
Die vom Upzising-Wizard des SQL Server erzeugten Trigger sind nicht kompatibel mit SQL Server 2012 und 2014.
Die Betriebsruhe bei einem Kunden zwischen den Feiertage nutzte ich, um einige Server eines Kunden auf den neusten Stand zu bringen. Der SQL Server hielt dabei eine böse Überraschung für mich. Nach einem Upgrade eines Datenbankservers des SQL Server 2008 auf den SQL Server 2014 verweigerten einige (aber nicht alle) Datenbanktabellen jeglichen Schreibzugriff mit der Fehlermeldung: Incorrect Syntax near '44446'. Das Problem konnte ich auf einem anderen System reproduzieren.
Die Ursachenforschung ergab, dass es fĂĽr die betroffenen Datenbanktabellen einen Trigger gab, in dem unter anderem dies stand:
BEGIN
RAISERROR 44447 'Der Datensatz kann nicht hinzugefĂĽgt oder
geändert werden. Aufgrund der Regeln für die referenzielle Integrität
ist in der Tabelle ''xyz'' ein verknĂĽpfter (verwandter) Datensatz
erforderlich.'
...
END
Diese Syntax fĂĽr die Verwendung von Raiserror wird seit SQL Server Version 2012 nicht mehr unterstĂĽtzt. Die Syntax ist nun:
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state } [ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
Es muss also nun zum Beispiel so heiĂźen:
RAISERROR ('44446 Der Datensatz kann nicht hinzugefĂĽgt oder
geändert werden. Aufgrund der Regeln für die referenzielle
Integrität ist in der Tabelle 'xyz'' ein verknüpfter (verwandter)
Datensatz erforderlich.',16,1)
Im Web habe ich dann noch den Hinweis gefunden: "SQL 2012 does not support the undocumented version of Raiserror".
OK, wenn also die alte Syntax undokumentiert war, stellt sich die Frage: Welcher Entwickler hat das gemacht?
Es war aber kein Entwickler beim Kunden. Es waren Entwickler bei Microsoft selbst, denn der Trigger wurde nicht manuell angelegt, sondern vor einigen Jahren von dem "Microsoft SQL Server Upzising Wizard" aus einer Microsoft-Access-Datenbank generiert. Also Vorsicht beim Upgrade von Datenbanken, die mit diesem Assistenten bestĂĽckt wurde. ()