Cómo: Utilizar funciones definidas por el usuario con valores de tablaFunciones definidas por el usuario

  • 03/30/2017
  • 2 minutos para leer
    • s
    • n
    • T
    • v
    • n
    • +6
  • Una tabla-función valorada en tabla devuelve un único conjunto de filas (a diferencia de los procedimientos almacenados, que pueden devolver múltiples formas de resultado). Dado que el tipo de retorno de una función con valor de tabla es Table, puede utilizar una función con valor de tabla en cualquier lugar de SQL en el que pueda utilizar una tabla. También puede tratar la función table-valued como lo haría con una tabla.

    Ejemplo

    La siguiente función SQL declara explícitamente que devuelve un TABLE. Por lo tanto, la estructura del rowset devuelto está definida implícitamente.

CREATE FUNCTION ProductsCostingMoreThan(@cost money) RETURNS TABLE AS RETURN SELECT ProductID, UnitPrice FROM Products WHERE UnitPrice > @cost 

LINQ to SQL mapea la función de la siguiente manera:

public IQueryable<ProductsCostingMoreThanResult> ProductsCostingMoreThan( System.Nullable<decimal> cost){ return this.CreateMethodCallQuery<ProductsCostingMoreThanResult>(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), cost);}
 <FunctionAttribute(Name:="dbo.ProductsCostingMoreThan", IsComposable:=True)> _Public Function ProductsCostingMoreThan(<Parameter(DbType:="Money")> ByVal cost As System.Nullable(Of Decimal)) As IQueryable(Of ProductsCostingMoreThanResult) Return Me.CreateMethodCallQuery(Of ProductsCostingMoreThanResult)(Me, CType(MethodInfo.GetCurrentMethod, MethodInfo), cost) End Function

Ejemplo

El siguiente código SQL muestra que se puede unir a la tabla que devuelve la función y, por lo demás, tratarla como cualquier otra tabla:

SELECT p2.ProductName, p1.UnitPrice FROM dbo.ProductsCostingMoreThan(80.50) AS p1 INNER JOIN Products AS p2 ON p1.ProductID = p2.ProductID 

En LINQ to SQL, la consulta se renderizaría de la siguiente manera:

 var q =from p in db.ProductsCostingMoreThan(80.50m)join s in db.Products on p.ProductID equals s.ProductIDselect new { p.ProductID, s.UnitPrice };
 Dim q = _From p In db.ProductsCostingMoreThan(80.5), p1 In db.Products _Where p.ProductID = p1.ProductID _Select p.ProductID, p1.UnitPrice

Ver también

  • Funciones definidas por el usuario

.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *