How to: Table-Valued User-Defined Functions Utilizar Funções Definidas pelo Utilizador – ADO.NETFunções Definidas

  • 03/30/2017
  • 2 minutos para ler
  • ul>>
  • s
  • n
  • T
  • v
  • n
  • +6

/li>

Uma tabela-A função valorizada devolve um único conjunto de linhas (ao contrário dos procedimentos armazenados, que pode devolver múltiplas formas de resultados). Porque o tipo de retorno de uma função com valor de tabela é Table, é possível usar uma função com valor de tabela em qualquer lugar em SQL que possa usar uma tabela. Também pode tratar a função valorizada em tabela tal como trataria uma tabela.

Exemplo

A seguinte função SQL declara explicitamente que retorna um TABLE. Portanto, a estrutura do conjunto de linhas devolvido é implicitamente definida.

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

LINQ para SQL mapeia a função da seguinte forma:

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

Exemplo

O seguinte código SQL mostra que se pode juntar à tabela que a função retorna e tratá-la de outra forma como se trataria qualquer outra tabela:

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

Em LINQ para SQL, a consulta seria feita da seguinte forma:

 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

Veja também

    li> Funções Definidas pelo Utilizador

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *