SQL Server 2005查询语法错误:“为'inner_tbl'多次指定了列'id_ctrc'。”

时间:2010-11-17 13:54:20

标签: sql sql-server sql-server-2005

WITH outer_tbl
AS (
  SELECT ROW_NUMBER() OVER (ORDER BY inner_tbl.ctrc_data DESC ) AS KOHANA_DB_ROWNUM, * 
  FROM (
    SELECT * FROM rkm_sac_ctrc 
      INNER JOIN rkm_sac_nf ON (rkm_sac_ctrc.id_ctrc = rkm_sac_nf.id_ctrc) 
    WHERE rkm_sac_ctrc.pag_cnpj = '46.344.354/0005-88' 
    AND rkm_sac_nf.nf_numero = '2023'
  ) AS inner_tbl
) 
SELECT * FROM outer_tbl WHERE KOHANA_DB_ROWNUM BETWEEN 1 AND 15

错误是:

  

'inner_tbl'指定了'id_ctrc'列多次。

     

'outer_tbl'指定了'id_ctrc'列多次。

我做错了什么?

5 个答案:

答案 0 :(得分:3)

不要使用select *。您需要为每列提供特定的列名,并且您需要连接两个具有相同名称的列。在任何情况下都不应该使用select *,尤其是当你有一个连接时,因为你要返回额外的不需要的信息。

答案 1 :(得分:1)

尝试包含表格的架构

答案 2 :(得分:1)

最有可能的原因是架构 - 您的代码最有可能针对 dbo 运行。您的观点可能在另一个架构中。

答案 3 :(得分:0)

你确定你在正确的数据库中运行它吗?运行此查询以检查:

select
    TABLE_CATALOG+'.'+TABLE_SCHEMA+'.'+TABLE_NAME
    from INFORMATION_SCHEMA.Views 
    where TABLE_NAME='rkm_sac_ctrc'

如果返回,请使用结果中给出的模式名称

答案 4 :(得分:0)

默认情况下,在Management Studio中,您的SQL可能正在对主数据库运行。

这就是为什么它找不到你在另一个数据库中的表。

尝试在SQL之前添加USE语句,例如USE DatabaseName

如果这不能解决问题,那么您可能需要在表名前加上shema和/或所有者名称。通常,那是dbo。但它可能是别的东西。在Management Studio中,您可以在“对象资源管理器”窗格中轻松查看。看那里的视图名称。