【问题标题】:Invalid column error even when column exists in SQL Server即使 SQL Server 中存在列,也会出现无效列错误
【发布时间】:2015-04-03 22:23:04
【问题描述】:
SELECT 
    S.EY_BNF_ADDR,S.[EY_BNF_COUNTRY], [Expected Country Code]
FROM 
    STG_TRXN S
JOIN 
    CCD_NULL_BNF C ON C.EY_BNF_ADDR = S.EY_BNF_ADDR

我来了

消息 207,第 16 层,状态 1,第 3 行
列名“EY_BNF_ADDR”无效。

对于连接列的上述查询,但是当我分别对连接列运行选择时,它们运行良好。这太奇怪了。一个连接列是varchar(765) null,另一个是varchar(8000) null

这是结构

CREATE TABLE [dbo].[CCD_NULL_BNF]
(
    [EY_ BNF_ADDR] [varchar](8000) NULL,
    [EY_BNF_COUNTRY] [varchar](255) NULL,
    [Expected Country Code] [varchar](255) NULL
) ON [PRIMARY]
GO

对于粘贴下表的庞大结构,我深表歉意 -

CREATE TABLE [dbo].[STG_TRXN]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [EY_ID] [bigint] NOT NULL,
    [SOURCE_FILE] [varchar](255) NOT NULL,
    [ACC_NO] [varchar](255) NULL,
    [ACC_TYPE] [varchar](255) NULL,
    [CR_ACC_NO] [varchar](255) NULL,
    [CR_ACC_TYP] [varchar](255) NULL,
    [SERVICE] [varchar](255) NULL,
    [VALUE_DATE] [varchar](255) NULL,
    [AMOUNT] [varchar](255) NULL,
    [OGB] [varchar](255) NULL,
    [OGB_ID] [varchar](255) NULL,
    [OGB_BIC] [varchar](255) NULL,
    [OGB_ADDR1] [varchar](255) NULL,
    [OGB_ADDR2] [varchar](255) NULL,
    [OGB_ADDR3] [varchar](255) NULL,
    [ORG] [varchar](255) NULL,
    [ORG_ID] [varchar](255) NULL,
    [ORG_ADDR1] [varchar](255) NULL,
    [ORG_ADDR2] [varchar](255) NULL,
    [ORG_ADDR3] [varchar](255) NULL,
    [ORG_BIC] [varchar](255) NULL,
    [OBI] [varchar](255) NULL,
    [BBI] [varchar](255) NULL,
    [OUTSERVICE] [varchar](255) NULL,
    [DIRECTION] [varchar](255) NULL,
    [MID] [varchar](255) NULL,
    [LOCAL_REF] [varchar](255) NULL,
    [IBK] [varchar](255) NULL,
    [IBK_ADDR1] [varchar](255) NULL,
    [IBK_ADDR2] [varchar](255) NULL,
    [IBK_ADDR3] [varchar](255) NULL,
    [IBK_BIC] [varchar](255) NULL,
    [BNF] [varchar](255) NULL,
    [BNF_ADDR1] [varchar](255) NULL,
    [BNF_ADDR2] [varchar](255) NULL,
    [BNF_ADDR3] [varchar](255) NULL,
    [BNF_BIC] [varchar](255) NULL,
    [BNF_ID] [varchar](255) NULL,
    [BBK] [varchar](255) NULL,
    [BBK_BIC] [varchar](255) NULL,
    [BBK_ADDR1] [varchar](255) NULL,
    [BBK_ADDR2] [varchar](255) NULL,
    [BBK_ADDR3] [varchar](255) NULL,
    [COUNTRYCODE] [varchar](255) NULL,
    [orig_rfb] [varchar](255) NULL,
    [EY_IBK_ADDR1] [varchar](255) NULL,
    [EY_IBK_ADDR2] [varchar](255) NULL,
    [EY_IBK_ADDR3] [varchar](255) NULL,
    [EY_OGB_ADDR1] [varchar](255) NULL,
    [EY_OGB_ADDR2] [varchar](255) NULL,
    [EY_OGB_ADDR3] [varchar](255) NULL,
    [EY_ORG_ADDR1] [varchar](255) NULL,
    [EY_ORG_ADDR2] [varchar](255) NULL,
    [EY_ORG_ADDR3] [varchar](255) NULL,
    [EY_BNF_ADDR1] [varchar](255) NULL,
    [EY_BNF_ADDR2] [varchar](255) NULL,
    [EY_BNF_ADDR3] [varchar](255) NULL,
    [EY_BBK_ADDR1] [varchar](255) NULL,
    [EY_BBK_ADDR2] [varchar](255) NULL,
    [EY_BBK_ADDR3] [varchar](255) NULL,
    [EY_IBK_COUNTRY] [varchar](255) NULL,
    [EY_OGB_COUNTRY] [varchar](255) NULL,
    [EY_BNF_COUNTRY] [varchar](255) NULL,
    [EY_BBK_COUNTRY] [varchar](255) NULL,
    [EY_OGB] [varchar](255) NULL,
    [EY_ORG] [varchar](255) NULL,
    [EY_BNF] [varchar](255) NULL,
    [EY_OBI] [varchar](255) NULL,
    [EY_BBI] [varchar](255) NULL,
    [IS_DELETE] [bit] NULL,
    [CREATE_DT] [datetime] NULL,
    [UPDATE_DT] [datetime] NULL,
    [IS_MOVED] [char](1) NULL,
    [IS_MOVED_DT] [datetime] NULL,
    [COMMENT] [varchar](255) NULL,
    [BNF_BANK_COUNTRY] [varchar](255) NULL,
    [ORG_BANK_COUNTRY] [varchar](255) NULL,
    [INTER_BANK_COUNTRY] [varchar](255) NULL,
    [EY_OGB_ADDR] [varchar](765) NULL,
    [EY_BNF_ADDR] [varchar](765) NULL,
    [EY_IBK_ADDR] [varchar](765) NULL,
    [EY_ORG_ADDR] [varchar](765) NULL,
    [EY_ORG_COUNTRY] [varchar](255) NULL,
    [EY_BBK_ADDR] [varchar](800) NULL,
    [EY_ORG_ID] [varchar](255) NULL,
    [EY_BNF_ID] [varchar](255) NULL,
    [EY_ORG_PARTY] [varchar](255) NULL,
    [EY_BNF_PARTY] [varchar](255) NULL
) ON [PRIMARY]
GO

有人知道发生了什么吗?

【问题讨论】:

  • 能否提供STG_TRXN的结构?
  • ... 对于另一张桌子也是如此。
  • 这些表(STG_TRXNCCD_NULL)是视图还是存储过程?而[Expected Country Code] 是从哪里来的?
  • @MartinSmith - 添加了表结构。预期的国家代码来自 CCD_NULL_BNF 表。
  • 将日期和金额等内容存储为 varchar(255) 是一种可怕的做法,会在以后给您带来严重问题,例如在排序或进行范围搜索时。

标签: sql sql-server sql-server-2008 select join


【解决方案1】:

在你的桌子上:

CREATE TABLE [dbo].[CCD_NULL_BNF](
    [EY_ BNF_ADDR] [varchar](8000) NULL,
    [EY_BNF_COUNTRY] [varchar](255) NULL,
    [Expected Country Code] [varchar](255) NULL
) ON [PRIMARY]

注意[EY_ BNF_ADDR]EY_后面有个空格

可以看到重复的错误here Fixed here

【讨论】:

    【解决方案2】:

    只需删除字段名称 [EY_BNF_ADDR] 中的空格:

    CREATE TABLE [dbo].[CCD_NULL_BNF]
    (
        [EY_BNF_ADDR] [varchar](8000) NULL,
        [EY_BNF_COUNTRY] [varchar](255) NULL,
        [Expected Country Code] [varchar](255) NULL
    ) ON [PRIMARY]
    GO
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多