C # и SQL - суб-выбор из параметра таблицы - PullRequest
1 голос
/ 17 июня 2010

Ниже приведен фрагмент кода для передачи таблицы в качестве параметра в запрос, который можно использовать в Sql Server 2008. Однако я запутался в «SELECT id.custid FROM @custids id». Почему он использует id.custid и @custids id ...?

private static void datatable_example() 
{

   string [] custids = {"ALFKI", "BONAP", "CACTU", "FRANK"};

   DataTable custid_list = new DataTable();
   custid_list.Columns.Add("custid", typeof(String));

   foreach (string custid in custids) {
      DataRow dr = custid_list.NewRow();
      dr["custid"] = custid;
      custid_list.Rows.Add(dr);
   }

   using(SqlConnection cn = setup_connection())
   {
      using(SqlCommand cmd = cn.CreateCommand()) 
      {

         cmd.CommandText =
           @"SELECT C.CustomerID, C.CompanyName
             FROM   Northwind.dbo.Customers C
             WHERE  C.CustomerID IN (SELECT id.custid FROM @custids id)";
         cmd.CommandType = CommandType.Text;

         cmd.Parameters.Add("@custids", SqlDbType.Structured);
         cmd.Parameters["@custids"].Direction = ParameterDirection.Input;
         cmd.Parameters["@custids"].TypeName = "custid_list_tbltype";
         cmd.Parameters["@custids"].Value = custid_list;

         using (SqlDataAdapter da = new SqlDataAdapter(cmd))
         using (DataSet        ds = new DataSet()) {
            da.Fill(ds);
            PrintDataSet(ds);
         }
      }
   }

1 Ответ

3 голосов
/ 17 июня 2010

'id' в подзапросе - просто псевдоним.

Точно так же, как у вас есть C в качестве псевдонима в основном предложении FROM и вы используете C.CustomerID.

Подзапрос также мог бы быть

 SELECT custid
 FROM @custids
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...