【问题标题】:Trouble creating temp table in SQL Server Management Studio在 SQL Server Management Studio 中创建临时表时遇到问题
【发布时间】:2020-11-10 17:55:22
【问题描述】:

我正在尝试从 2 个表的连接中创建一个表,以便在数据之间切换。但是我在 "(" 上遇到语法错误,如果我删除 I 并且只执行 "AS",我会在 select 命令上收到语法错误。

CREATE TABLE Neigh 
AS 
    (SELECT *
     FROM COR_NEIGBORHOODS_N1 A1 
     LEFT JOIN NEIG_RAMAT_GAN_SHCONOT B1 ON A1.Settle_Name = B1.City_Name 
                                         AND A1.NEIGHBORHOODs_AREA_FNAME = B1.name
     WHERE B1.City_Name IS Null AND A1.Settle_Code = 8600)

有谁知道问题出在哪里?

【问题讨论】:

    标签: sql sql-server ddl


    【解决方案1】:

    SQL Server 不支持create table as。相反,它使用语法into。所以:

    select *
    into Neigh
    from COR_NEIGBORHOODS_N1 n left join
         NEIG_RAMAT_GAN_SHCONOT nrg
         on n.Settle_Name = nrg.City_Name and
            n.NEIGHBORHOODs_AREA_FNAME = nrg.name
    WHERE nrg.City_Name IS Null and n.Settle_Code = 8600;
    

    使用select * 很危险——因为列名可能重复。我建议您具体列出这些列。

    请注意,我还将表格别名从无意义的字母更改为表格名称的缩写。

    【讨论】:

    • 好的,所以我使用了这种语法,一切都很好,但问题是正如你所说,我在表中有 2 个同名的列。此列名称无法更改,因为它是由 ArcGIS pro 设置的,它是一个地理数据列。所以我不能运行语法
    • 正如 Gordon 已经指出的那样,使用“*”作为选择列表是有问题的。现在是你的懒惰。一个表不能有多个同名的列,因此请指定所需的列。更好的是 - 为什么需要创建一个表?
    【解决方案2】:

    CREATE TABLE Neigh AS (SELECT Column_name AS Column1,Column_name AS Column2 FROM COR_NEIGBORHOODS_N1 CN LEFT JOIN NEIG_RAMAT_GAN_SHCONOT NRG ON CN.Settle_Name = NRG.City_Name AND CN.NEIGHBORHOODs_AREA_FNAME = NRG.name WHERE NRG.City_Name IS Null AND CN.Settle_Code = 8600)

    对于与我在上述查询中使用的表相同的表,请使用“AS”作为列别名。

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2015-10-23
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多