当我通过 Microsoft SQL Server Management Studio 使用 SQL Server 运行以下查询时,为什么我会在这篇文章的标题中收到错误消息?
-- create the dash_airports table
CREATE TABLE dash_airports
AS ( SELECT [Loc_Id], [ARP_Latitude], [ARP_Longitude], [Facility_Type], [Wind_Indicator]
FROM airportandrunway.dbo.Airports
WHERE [Loc_Id] IN ('09J','14A','18A','1V6','22S','2I0','YKM','YKN') );
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '('.
我按照这篇操作方法文章中的解决方案 2 的说明进行操作,但它显然不起作用。因此,作为健全性检查,我在 MySQL Workbench 中运行它,它确实在那里工作!是什么赋予了?
恭喜!您发现了 SQL 方言。
SQL数据库系统有很多,每个系统都有自己的SQL方言。有时差异很小,有时很大。通常,差异出现在 SQL 的 DDL(数据定义语言)部分,它具有操作数据库对象的命令,如
CREATE TABLE
和ALTER INDEX
类似的。你提到的文章是一篇糟糕的文章,因为它没有说明它教的是哪种方言。它实际上是MySQL,但文章中没有提及它。
MySQL 方言以使用它的 MySQL DBMS 命名——当然,连接到 MySQL DBMS 的“Workbench”工具工作得很好。
Microsoft SQL Server 使用 T-SQL。类似于 T-SQL 中的 MySQL 语句是:
顺便说一下,MySQL 方言非常接近 Oracle 使用的 PL/SQL。存在差异,但从 select 中创建表的方式类似。
大多数其他方言都在模仿其他最古老的方言——由 Sybase 开发的 Transact SQL。T-SQL 是 Transact SQL 的非常接近的继承者,但也存在差异。
正如 Denis 提到的,MSSQL( Synapse Analytics除外)没有
CREATE TABLE AS SELECT
. MSSQL 中的对应项就是我们所说的SELECT INTO
,即根据语句的结果创建和填充表的能力SELECT
。例子: