从具有不同值的多个表列中进行选择

时间:2018-03-25 17:27:44

标签: sql sql-server-2008

我试图创建一个可以过滤表中多个表列的搜索按钮,我有三个单独的代码可以搜索特定表列(LastName,FirstName和DriverID)上的数据:

SqlConnection Con = new SqlConnection();
Con.ConnectionString = "Data Source=PC-PC\\MIKO;
                        Initial Catalog=Caproj;
                        Integrated Security=True;";
Con.Open();
string qry = "select LastName from [Driver Table] where LastName=@id";
SqlCommand cmd = new SqlCommand(qry, Con);
cmd.Parameters.AddWithValue("@id", slastname.Text);
cmd.ExecuteNonQuery();
SqlDataAdapter da2 = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da2.Fill(dt);
if (dt.Rows.Count > 0)
 {
  MessageBox.Show("Valid Input");
 }
else
{
 MessageBox.Show("Invalid Input");
}

有没有办法可以同时搜索所有内容而无需为每个搜索单独进行过滤?有点像这样:

SELECT LastName, FirstName, DriverID 
FROM [Driver Table] 
WHERE LastName=@id 
  AND FirstName=@id 
  AND DriverID=@id

2 个答案:

答案 0 :(得分:1)

我不确定这是否是你需要的。 但是,当3列中存在id时,此查询将返回 1 值。

SELECT  
    CASE WHEN EXISTS (SELECT * FROM [Driver Table] WHERE LastName = @id) 
            THEN 1 
         WHEN EXISTS (SELECT * FROM [Driver Table] WHERE FirstName = @id) 
            THEN 1 
         WHEN EXISTS (SELECT * FROM [Driver Table] WHERE DriverID = @id) 
            THEN 1 
         ELSE 0 
    END

答案 1 :(得分:0)

如果我理解正确,请不要or

SELECT LastName, FirstName, DriverID 
FROM [Driver Table] 
WHERE LastName = @id OR
      FirstName = @id OR
      DriverID = @id;

或者更简单:

SELECT LastName, FirstName, DriverID 
FROM [Driver Table] 
WHERE @id IN (LastName, FirstName, DriverID);