2012-03-28 50 views
0

我的表:如何在sqlserver 2008中一次檢查更多的列值?

id address tag 
1 test class1 
2 test1 class2 
3 test3 class3 

在UI我正在顯示的所有標籤名稱爲複選框。 當用戶選擇一個或多個標籤名稱時,則需要獲取所需的地址值。如何獲得? 如果用戶在UI中選擇class1,class2,則需要獲得test,test1作爲結果。 請告訴我如何在sqlserver 2008中編寫查詢。

編輯代碼:

taglist = "class1,class2"; 
       SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString); 
       SqlCommand cmd = new SqlCommand("usp_GetTags", con); 
       cmd.Parameters.Add("@Tags", SqlDbType.VarChar).Value = taglist; 

       con.Open(); 

       cmd.CommandType = CommandType.StoredProcedure; 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 

而傳遞參數如上述沒有得到任何results.if我通過單個標記列表= Class1的越來越results.but標記表=「1類,等級2」沒有得到任何resuls.please告訴我如何從UI傳遞多個參數。

回答

1

您可以使用IN關鍵字在sql server中編寫查詢。

Select address from mytable where tag IN ('class1','class2') 

編輯:

與值這樣的存儲過程添加的參數。下面的代碼是用C#.NET

  comand.Parameters.AddWithValue("@Parameter1", "class1"); 
      comand.Parameters.AddWithValue("@Parameter2", "class2"); 

編輯2: 它放在一個單一字符串的所有值非常簡單,因此查詢也適合這一點。編寫查詢在存儲過程像

  Select address from mytable where tag IN (@SingleParameter) 

,並在您的編碼部分寫像遵循

  string SingleParameter = ""; 
      SingleParameter = "class1,class2,class3"; 
      comand.Parameters.AddWithValue("@SingleParameter",SingleParameter); 

編輯3: 終於讓我找到你的問題的解決方案。寫存儲過程如下

ALTER PROCEDURE dbo.TestSP 
    /* 
    (
    @parameter1 int = 5, 
    @parameter2 datatype OUTPUT 
    ) 
    */ 
    @SingleParameter varchar(30) 
AS 
    /* SET NOCOUNT ON */ 
    declare @tags varchar(500) 
    set @tags = @SingleParameter 
    create table #t (tag varchar(10)) 
    set @tags = 'insert #t select ' + replace(@tags, ',', ' union select ') 
    exec(@tags) 
     Select address from sample1 where (tag in (select tag from #t)) 
    drop table #t 
    RETURN 

,併發送參數SingleParameter如下

  string SingleParameter = ""; 
      SingleParameter = "'class1','class2','class3'"; 
      comand.Parameters.AddWithValue("@SingleParameter",SingleParameter); 
+0

我試過,但得到錯誤作爲無效列名的Class1,Class2中。 – user1237131 2012-03-28 11:47:02

+0

@ user1237131,class1和class2不是列右側,它們是標記列中的值。 – 2012-03-28 11:49:17

+0

S它們是標記列中的列值。我嘗試使用上面的語法,但是將錯誤列爲「無效列名稱'class1'」,就像那樣 – user1237131 2012-03-28 11:51:36