SQL Server错误:列名不明确

时间:2012-06-20 12:08:02

标签: c# asp.net sql

我创建了一个接收不同参数的SQL查询。当我将参数传递给Region-ID时,我收到了一个错误:

  

System.Data.SqlClient.SqlException:不明确的列名'REGION_ID'

当我将数据传递给其他参数时,它的工作没有问题。

我为sql查询构建了一个字符串:

StringBuilder constrains = new StringBuilder();
AppendConstrain(constrains, "RAUMKLASSE_ID", RAUMKLASSE_ID);
AppendConstrain(constrains, "STADT_ID", STADT_ID);
AppendConstrain(constrains, "GEBAEUDE_ID", GEBAEUDE_ID);
AppendConstrain(constrains, "REGION_ID", REGION_ID);
AppendConstrain(constrains, "RAUMATTRIBUTE_ID", RAUMATTRIBUTE_ID);
AppendConstrain2(constrains, "r.REGION_ID", "reg.ID");
AppendConstrain2(constrains, "r.STADT_ID", "st.ID");
AppendConstrain2(constrains, "r.ETAGE_ID", "et.ID");

这是我的SQL查询:

StringBuilder query =
            new StringBuilder("SELECT DISTINCT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID,reg.NAME AS REGNAME, st.NAME AS STNAME, et.BEZEICHNUNG as ETBEZEICHNUNG FROM RAZUORDNUNG rz right join RAUMATTRIBUTE ra ON rz.RAUMATTRIBUTE_ID = ra.ID right join RAUM r ON rz.RAUM_ID = r.ID, REGION reg, STADT st, ETAGE et");

我不知道问题出在哪里?

编辑:

这是追加字符串函数:

private static void AppendConstrain(StringBuilder query, string name, string value)
    {
        if (String.IsNullOrEmpty(value))
            return;

        if (query.Length > 0)
            query.Append(" AND ");

        query.AppendFormat("{0} IN ({1})", name, value);
    }

    private static void AppendConstrain2(StringBuilder query, string name, string name2)
    {
        if (String.IsNullOrEmpty(name2))
            return;

        if (query.Length > 0)
            query.Append(" AND ");

        query.AppendFormat("{0} = ({1})", name, name2);
    }

3 个答案:

答案 0 :(得分:5)

您有两个不同的REGION_ID引用:

StringBuilder constrains = new StringBuilder();
AppendConstrain(constrains, "REGION_ID", REGION_ID);
AppendConstrain2(constrains, "r.REGION_ID", "reg.ID");

这些引用中只有一个是合格的(r.REGION_ID)。你需要完全符合他们的资格。看起来另一个应该被限定为reg.REGION_ID,例如:

StringBuilder constrains = new StringBuilder();
AppendConstrain(constrains, "reg.REGION_ID", REGION_ID);
AppendConstrain2(constrains, "r.REGION_ID", "reg.ID");

答案 1 :(得分:4)

您似乎要为REGION_ID附加两次约束。

使用表格限定此行:

AppendConstrain(constrains, "REGION_ID", REGION_ID);

成为

AppendConstrain(constrains, "<table/alias>.REGION_ID", REGION_ID);

答案 2 :(得分:0)

在您的代码中,我只能看到对REGION_ID

的一个正确引用
AppendConstrain2(constrains, "r.REGION_ID", "reg.ID"); 

为另一个,即

 AppendConstrain(constrains, "REGION_ID", REGION_ID); 

您需要提供引用此ID的表的引用。