Скалярно-значные функции могут быть вызваны из .NET следующим образом:
SqlCommand cmd = new SqlCommand("testFunction", sqlConn); //testFunction is scalar
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("retVal", SqlDbType.Int);
cmd.Parameters["retVal"].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteScalar();
int aFunctionResult = (int)cmd.Parameters["retVal"].Value;
Я также знаю, что аналогичным образом можно вызывать и функции с табличным значением, например:
String query = "select * from testFunction(param1,...)"; //testFunction is table-valued
SqlCommand cmd = new SqlCommand(query, sqlConn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(tbl);
Мой вопрос заключается в том, можно ли вызывать функции с табличными значениями в качестве хранимых процедур, как это делают функции со скалярными значениями? (Например, повторить мой первый фрагмент кода с вызовом функции с табличным значением и получением возвращаемой таблицы через параметр ReturnValue).
Нет, поскольку их нужно выбирать. Однако можно создать обертку хранимой процедуры, что, возможно, перечеркнет смысл наличия табличной функции.