Mar*_*len 8 sql-server t-sql errors
当我通过 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 '('.
Run Code Online (Sandbox Code Playgroud)
我按照本指南文章中解决方案 2 的说明进行操作,但它显然不起作用。因此,作为健全性检查,我在 MySQL Workbench 中运行了它,它确实在那里工作了!是什么赋予了?
小智 14
恭喜!您发现了 SQL 方言。
SQL数据库系统有很多,每个系统都有自己的SQL方言。有时差异很小,有时差异很大。通常,差异出现在 SQL 的 DDL(数据定义语言)部分,该部分具有操作数据库对象的命令,例如CREATE TABLE
等ALTER INDEX
。
你提到的这篇文章是一篇糟糕的文章,因为它没有说明它教的是哪种方言。它实际上是MySQL,但文章中没有提及。
MySQL 方言以使用它的 MySQL DBMS 命名 - 当然,连接到 MySQL DBMS 的“Workbench”工具运行得很好。
-- That is MySQL
CREATE TABLE gamer
AS
SELECT
gamer, score, championship_date
FROM championship
WHERE championship_date <= 2020-08-10;
Run Code Online (Sandbox Code Playgroud)
Microsoft SQL Server 使用 T-SQL。类似于 T-SQL 中的 MySQL 语句:
-- That is T-SQL
SELECT
gamer, score, championship_date
INTO gamer
FROM championship
WHERE championship_date <= 2020-08-10;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,MySQL 方言与 Oracle 使用的 PL/SQL 非常接近。虽然存在差异,但从 select 创建表的操作类似。
对于此任务,大多数其他方言都模仿其他最古老的方言 - Transact SQL,由 Sybase 开发。T-SQL 是 Transact SQL 的非常接近的继承者,但也存在差异。
正如 Denis 提到的,MSSQL( Synapse Analytics除外)没有CREATE TABLE AS SELECT
. MSSQL 中的对应功能就是我们所说的基于SELECT INTO
语句结果创建和填充表的能力SELECT
。
例子:
SELECT Loc_Id, ARP_Latitude, ARP_Longitude, Facility_Type, Wind_Indicator
INTO dash_airports
FROM airportandrunway.dbo.Airports
WHERE Loc_Id IN ('09J','14A','18A','1V6','22S','2I0','YKM','YKN')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4690 次 |
最近记录: |