2012-06-20 37 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"); 

我不知道問題出在哪裏?

編輯:

這裏是追加字符串函數:

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

您需要提供從哪個表引用此ID的參考。