Ich migriere eine SQL Server 6.5-Datenbank auf SQL Server 2012. Die Migration verlief gut, aber eine der Software, die diese Datenbank verwendet, führt eine seltsame Abfrage aus:
UPDATE myTable SET Field1='',Field2=0, a.Field3=14 WHERE Field10=1
Das Problem liegt natürlich bei der Kennung ('a') vor Field3. Es gibt keine Ansichten, Aliase oder Verknüpfungen mit diesem Namen, aber für SQL Server 6,5 ist dies eine gültige Abfrage.
Erinnert sich einer von Ihnen an die Bedeutung dieser Syntax, da ich mit SQL Server 6.5 nicht vertraut bin?
Die Software, die diese Abfrage verwendet, ist eine alte, von der ich keine Quellen habe (und die Firma, die sie erstellt hat, ist jetzt geschlossen ...), daher ist das Ändern der Abfrage keine Option.
Die vollständige Abfrage lautet
UPDATE SituazioneMacchina
SET DatiSetPointSpediti=''
, SpedMappa=0
, NrRichMappa=0
, DatiSetPoint=''
, a.IDProduzione=14
WHERE NumMacchina=1
Wenn ich "a.IDProduzione" durch "fasdffas.IDProduzione" ändere, funktioniert die Abfrage weiterhin in SQL Server 6.5
quelle
UPDATE a SET ... FROM myTable AS a WHERE ...
, sollte sie gültig sein, ja?Antworten:
Wie Sie sagen, macht die Abfrage keinen Sinn.
Wahrscheinlich nur ein Parser-Fehler in 6.5. Es gibt ein paar ähnlichen anderen Probleme gewesen
ORDER BY nonsensealias.somecolumn
arbeiteten bis 2005 mit den SQL Server 2000 - Verhalten Wesenund es gibt immer noch ein ähnliches Problem für
INSERT
Anweisungen, bei denen die folgende Syntax akzeptiert wird.quelle
query in SQL 2008 with SQL 2000 compatibility level
Dies ändert einige Dinge beim Parsen und Tokenisieren, aber es gibt immer noch nur EINE zugrunde liegende Engine, dh es wird die SQL Server 2000-Engine nicht auf magische Weise ausgeführt!