我正在将 SQL Server 6.5 数据库迁移到 SQL Server 2012。迁移进行得很顺利,但使用该数据库的其中一个软件执行了一个奇怪的查询:
UPDATE myTable SET Field1='',Field2=0, a.Field3=14 WHERE Field10=1
Run Code Online (Sandbox Code Playgroud)
问题当然在于 Field3 之前的标识符 ('a')。没有具有该名称的视图、别名或连接,但对于 SQL Server 6,5 而言,这是一个有效的查询。
由于我对 SQL Server 6.5 不熟悉,有没有人记得这个语法的含义?
使用此查询的软件是旧的,我没有任何来源(并且制作它的公司现已关闭......),因此更改查询不是一种选择。
完整的查询是
UPDATE SituazioneMacchina
SET DatiSetPointSpediti=''
, SpedMappa=0
, NrRichMappa=0
, DatiSetPoint=''
, a.IDProduzione=14
WHERE NumMacchina=1
Run Code Online (Sandbox Code Playgroud)
如果我将“a.IDProduzione”更改为“fasdffas.IDProduzione”,该查询在 SQL Server 6.5 中仍然有效
正如你所说的查询没有任何意义。
可能只是 6.5 中的解析器错误。已经有几个类似的其他问题ORDER BY nonsensealias.somecolumn的工作,直到2005年与SQL Server 2000的行为之中
ORDER BY 子句中的列名被解析为选择列表中列出的列,无论它们是否被限定。例如,以下查询执行没有错误:
USE pubs
SELECT au_fname AS 'FName',
au_lname AS 'LName'
FROM authors a
ORDER BY a.LName
Run Code Online (Sandbox Code Playgroud)
SQL Server 忽略 ORDER BY 子句中的限定符 a 并将列名 LName 解析为选择列表。
对于接受以下语法的语句,仍然存在类似的问题INSERT。
CREATE TABLE nisse(hult int NOT NULL)
go
INSERT nisse(ab.xx.hult)
VALUES(12)
go
DROP TABLE nisse
Run Code Online (Sandbox Code Playgroud)