2008-08-12 794 views
27

funciones con valores escalares se pueden llamar desde .NET de la siguiente manera:Llamada de funciones SQL valores de tabla A partir de .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; 

También sé que las funciones con valores de tabla se pueden llamar de manera similar, por ejemplo, :

String query = "select * from testFunction(param1,...)"; //testFunction is table-valued 
SqlCommand cmd = new SqlCommand(query, sqlConn); 
SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
adapter.Fill(tbl); 

Mi pregunta es, se pueden llamar funciones con valores de tabla como procedimientos almacenados, al igual que las funciones con valores escalares puede? (por ejemplo, replicar mi primer fragmento de código con una función de valor de tabla que se llama y obtener la tabla devuelta a través de un parámetro ReturnValue).

+1

@ChuckConway ¿Por qué soltar C# del título? Era válido, teniendo en cuenta la etiqueta C# ... pero esa etiqueta no lo ayuda, para aparecer en Google. –

Respuesta

19

No porque debe seleccionarlas. Sin embargo, puede crear un contenedor de proc almacenado, que puede anular el punto de tener una función de tabla.

+0

No creo que realmente derrote el punto de tener una función de valor de tabla. Un punto de tener TVF es que tienen ciertas garantías de seguridad que los procedimientos almacenados no tienen. Otro punto es que pueden reutilizarse, mientras que es mucho más difícil reutilizar un procedimiento almacenado sin simplemente copiar y pegar. – user420667

Cuestiones relacionadas