2012-06-20 14 views
2

Я создал SQL-запрос, который получает разные параметры. Когда я прохожу параметр только Region-ID я получил ошибку:Ошибка SQL Server: неоднозначное имя столбца

System.Data.SqlClient.SqlException: Ambiguous column name '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"); 

Я не знаю, где проблема?

EDIT:

здесь функция конечной строкой:

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

Вы кажетесь Добавляя ограничение дважды REGION_ID.

Квалифицируйтесь эту строку таблицы:

AppendConstrain(constrains, "REGION_ID", REGION_ID); 

становится

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

это было так просто спасибо. решение было: r.REGION_ID –

+0

Почему другие параметры работают без «r». ? –

+0

Поскольку у вас, вероятно, есть другая таблица, отличная от RAUM, которую вы называете «r», у которой есть поле с именем «REGION_ID». –

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"); 
0

В своем коде я могу видеть только один правильный ссылка на region_id

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

для другого т.е.

AppendConstrain(constrains, "REGION_ID", REGION_ID); 

вам необходимо указать ссылку, с которой вы ссылаетесь на этот идентификатор.

Смежные вопросы