【问题标题】:An object or column name is missing or empty. But its not?缺少对象或列名称或为空。但不是吗?
【发布时间】:2019-11-25 15:48:13
【问题描述】:

我正在处理第 7 组查询,所有查询都使用 SELECT * INTO some_table 没有问题。由于某种原因,SQL Server 中的以下查询引发了错误

对象或列名丢失或为空。对于选择进入 语句,验证每一列都有一个名称。对于其他陈述,请查看 对于空别名。不允许使用定义为 "" 或 [] 的别名。 将别名更改为有效名称。

关于它可能是什么的任何想法? 请注意,在没有 select into 的情况下运行查询将导致数据按预期返回和显示。

Select * into MYDB.MY_TBL
SELECT OT.U_ID AS "U_ID"
    ,R.E AS "E"
    ,R.IR AS "CKT"
    ,A.RI AS "OC"
    ,A.EQ AS "SEQ"
    ,A.HA AS "CHA"
    ,A.A_HA AS "ATE"
    ,A.BIL AS "BIL"
    ,A.CHA AS "CHAA"
    ,A.RAT AS "AMT"
    ,A.PRM AS "PREM"
    ,A.T_CHG AS "RAT"
    ,A.PER AS "LAS"
    ,A.S_BIL AS "BIL_A"
    ,A.CD AS "CDE"
    ,A.CBIL_J AS "BIL_J"
    ,A.AMT_D AS "TB"
    ,A.CRY AS "CTRY"
    ,A.RVW AS "RVW"

FROM MYDB.OTHER_TBL OT
JOIN [LINKEDSERVER\INST,0000].FE.dbo.tblR R
    ON OT.E = R.E
JOIN [LINKEDSERVER\INST,0000].FE.dbo.tblA A
    ON R.IR = A.IR

WHERE OT.U_ID = 'TEST'

【问题讨论】:

    标签: sql sql-server sql-insert


    【解决方案1】:

    您有两个selects。我想你只是想要:

    SELECT OT.U_ID AS "U_ID",
           . . .
    INTO MYDB.MY_TBL
    FROM . . . 
    

    INTO 应该在SELECT 列列表之后。

    或者,您可以使用子查询,但这似乎没有必要。

    【讨论】:

    • 你知道我完全错过了我的from () 子查询设置......我现在明白了。现在只和它战斗了一个小时,只需要离开然后回来。
    【解决方案2】:

    @GordonLinoff 示例的工作原理我意识到我忘记了什么,这是我通常使用的 FROM () 子查询设置。

    我将提供一个与 Gordon 方法相反的示例。

    IE:

    Select * into MYDB.MY_TBL
    FROM(
    SELECT OT.U_ID AS "U_ID"
        ...
    FROM MYDB.OTHER_TBL OT
    WHERE OT.U_ID = 'TEST'
    ) SUB
    

    【讨论】:

      【解决方案3】:

      请注意这两点:

      1.您有两列具有给定的“CHA”别名

      2.看来您需要将查询重写为:

      SELECT OT.U_ID AS "U_ID"
          ,R.E AS "E"
          ,R.IR AS "CKT"
          ,A.RI AS "OC"
          ,A.EQ AS "SEQ"
          ,A.HA AS "CHA_DUPLICATE"
          ,A.A_HA AS "ATE"
          ,A.BIL AS "BIL"
          ,A.CHA AS "CHA_DUPLICATE2"
          ,A.RAT AS "AMT"
          ,A.PRM AS "PREM"
          ,A.T_CHG AS "RAT"
          ,A.PER AS "LAS"
          ,A.S_BIL AS "BIL_A"
          ,A.CD AS "CDE"
          ,A.CBIL_J AS "BIL_J"
          ,A.AMT_D AS "TB"
          ,A.CRY AS "CTRY"
          ,A.RVW AS "RVW"
      
      INTO MYDB.MY_TBL -- <<<<<<< NOTE
      
      FROM MYDB.OTHER_TBL OT
      JOIN [LINKEDSERVER\INST,0000].FE.dbo.tblR R
          ON OT.E = R.E
      JOIN [LINKEDSERVER\INST,0000].FE.dbo.tblA A
          ON R.IR = A.IR
      
      WHERE OT.U_ID = 'TEST'
      

      【讨论】:

      • 我重写了帖子的名称。请注意,原文中没有重复名称。由于我忘记包含FROM() 子查询,因此问题已解决。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      相关资源
      最近更新 更多