2

さまざまなパラメーターを受け取る 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);
    }
4

3 に答える 3

5

REGION_IDへの2つの異なる参照があります。

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

それらの参照の1つだけが修飾されます(r.REGION_ID)。両方を完全に認定する必要があります。もう一方はreg.REGION_IDとして修飾する必要があるようです。例:

StringBuilder constrains = new StringBuilder();
AppendConstrain(constrains, "reg.REGION_ID", REGION_ID);
AppendConstrain2(constrains, "r.REGION_ID", "reg.ID");
于 2012-06-20T12:11:59.567 に答える
4

の制約を2回追加しているようですREGION_ID

この行を次の表で修飾します。

AppendConstrain(constrains, "REGION_ID", REGION_ID);

になります

AppendConstrain(constrains, "<table/alias>.REGION_ID", REGION_ID);
于 2012-06-20T12:13:49.953 に答える
0

あなたのコードでは、REGION_IDへの適切な参照を1つだけ見ることができます

AppendConstrain2(constrains, "r.REGION_ID", "reg.ID"); 

他のすなわち

 AppendConstrain(constrains, "REGION_ID", REGION_ID); 

このIDを参照しているテーブルからの参照を提供する必要があります。

于 2012-06-20T12:16:20.983 に答える