Я бы сказал, что Access SQL и T-SQL (SQL Server) имеют больше различий, чем сходств. Любое появление сходства связано с тем, что 1) оба основаны на стандарте SQL-89 (но и T-SQL, и стандарты значительно продвинулись, Access не очень), 2) команда SQL Server попыталась, но не смогла создать Access2000 ( Jet 4.0) соответствует стандарту начального уровня SQL-92 (де-факто стандарт "минимальный").
Возьмем, к примеру, инструкцию UPDATE. В простейшей форме, то есть с использованием литеральных значений или значений входных параметров (скаляров), они в целом одинаковы. Однако при обновлении одной таблицы с использованием значений из другой таблицы последний синтаксис T-SQL (2008) поддерживает синтаксис скалярных подзапросов SQL-92, синтаксис MERGE
стандартов SQL-99 и SQL: 2003 с полезными проприетарными расширениями, плюс его собственный проприетарный синтаксис UODATE..FROM
(которого следует избегать в настоящее время , поскольку он допускает потенциально неоднозначные результаты), каждый из которых может дополнительно использовать общие табличные выражения SQL: 2003 (полезно для упрощения скалярного подзапроса SQL-92 синтаксис).
Для Access вы вынуждены использовать собственный синтаксис UPDATE..FROM
, который не совпадает с синтаксисом UPDATE..FROM
T-SQL, но имеет ту же проблему, что и потенциально неоднозначные результаты (но этого времени избежать нельзя! ), если только запрос не включает агрегированные значения, в этом случае вы вообще не можете использовать SQL (!!) и должны прибегать к процедурному коду на стороне клиента (не SQL) (поскольку Access не поддерживает процедурный код SQL, еще одно огромное отличие от T-SQL).