Functions en SQL Server 2005
Functions en SQL Server 2005
IF OBJECT_ID (Ndbo.ufnGetInventoryStock, NFN) IS NOT NULL DROP FUNCTION ufnGetInventoryStock; GO CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int) RETURNS int AS Returns the stock level for the product. BEGIN DECLARE @ret int; SELECT @ret = SUM(p.Quantity) FROM Production.ProductInventory p WHERE p.ProductID = @ProductID AND p.LocationID = 6; IF (@ret IS NULL) SET @ret = 0 RETURN @ret END; GO Utilizando la nueva function SELECT ProductModelID, Name, dbo.ufnGetInventoryStock(ProductID)AS CurrentSupply FROM Production.Product WHERE ProductModelID BETWEEN 75 and 80; Funciones con valores de tabla
Las funciones con valores de tabla definidas por el usuario devuelven un tipo de datos table. Las funciones con valores de tabla en lnea no tienen cuerpo; la tabla es el conjunto de resultados de una sola instruccin SELECT
Demo: Creando una Funcion con valores de tabla en linea IF OBJECT_ID (NSales.ufn_SalesByStore, NIF) IS NOT NULL DROP FUNCTION Sales.ufn_SalesByStore; GO CREATE FUNCTION Sales.ufn_SalesByStore (@storeid int) RETURNS TABLE AS
RETURN ( SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS YTD Total FROM Production.Product AS P JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID WHERE SH.CustomerID = @storeid GROUP BY P.ProductID, P.Name); GO Utilizando la ufn_SalesByStore function SELECT * FROM Sales.ufn_SalesByStore (602);
Para una funcin con valores de tabla de mltiples instrucciones, el cuerpo de la funcin, definido en un bloque BEGINEND, contiene una serie de instrucciones Transact-SQL que generan e insertan filas en la tabla que se va a devolver.
Demo: Creando una Funcion con valores de tabla de multiples instrucciones: CREATE FUNCTION dbo.ufn_FindReports (@InEmpID INTEGER) RETURNS @retFindReports TABLE ( EmployeeID int primary key NOT NULL, Name nvarchar(255) NOT NULL, Title nvarchar(50) NOT NULL, EmployeeLevel int NOT NULL, Sort nvarchar (255) NOT NULL ) Returns a result set that lists all the employees who report to the specific employee directly or indirectly.*/ AS BEGIN WITH DirectReports(Name, Title, EmployeeID, EmployeeLevel, Sort) AS (SELECT CONVERT(Varchar(255), c.FirstName + + c.LastName), e.Title, e.EmployeeID,1, CONVERT(Varchar(255), c.FirstName + + c.LastName) FROM HumanResources.Employee AS e JOIN Person.Contact AS c ON e.ContactID = c.ContactID WHERE e.EmployeeID = @InEmpID UNION ALL SELECT CONVERT(Varchar(255), REPLICATE (| , EmployeeLevel) + c.FirstName + + c.LastName), e.Title,
EmployeeID, EmployeeLevel + 1, CONVERT (Varchar(255), RTRIM(Sort) + | + FirstName + + LastName) FROM HumanResources.Employee as e JOIN Person.Contact AS c ON e.ContactID = c.ContactID JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID ) copy the required columns to the result of the function INSERT @retFindReports SELECT EmployeeID, Name, Title, EmployeeLevel, Sort FROM DirectReports RETURN END; GO Example invocation SELECT EmployeeID, Name, Title, EmployeeLevel FROM dbo.ufn_FindReports(109) ORDER BY Sort;
Funciones integradas
SQL Server proporciona las funciones integradas para ayudarle a realizar diversas operaciones. No se pueden modificar. Puede utilizar funciones integradas en instrucciones Transact-SQL para: Tener acceso a informacin de las tablas del sistema de SQL Server sin tener acceso a las tablas del sistema directamente. Realizar tareas habituales como SUM, GETDATE o IDENTITY. Las funciones definidas por el usuario se han ampliado en Microsoft SQL Server 2005 para incluir las funciones escritas en cualquier lenguaje de programacin que se admita en Microsoft .NET Framework Remember: Las funciones en lnea pueden utilizarse para obtener la funcionalidad de vistas con parmetros. No obstante, las vistas no admiten parmetros en las condiciones de bsqueda especificadas en la clusula WHERE. Las funciones en lnea definidas por el usuario pueden utilizarse para admitir parmetros en las condiciones de bsqueda especificadas en la clusula WHERE. No se recomienda el uso de funciones definidas por el usuario que producen efectos secundarios en la base de datos. Cuando se llama desde una funcin, el procedimiento almacenado extendido no puede devolver conjuntos de resultados al cliente
En general, si el procedimiento almacenado devuelve un solo conjunto de resultados, defina una funcin con valores de tabla. Para las funciones con valores de tabla no son necesarias las instrucciones EXECUTE dinmicas Las funciones CLR suponen una alternativa ms confiable y escalable frente a los procedimientos almacenados extendidos. Muchos procedimientos almacenados extendidos realizan tareas de clculo que son difciles de expresar en TransactSQL Adems, los procedimientos almacenados extendidos que devuelven conjuntos de resultados mediante el acceso a un recurso externo, como un archivo o un servicio Web, se pueden volver a escribir mediante una funcin con valores de tabla CLR.
SQL Server 2008 admite las funciones definidas por el usuario y las funciones del sistema integradas. Al igual que las funciones en los lenguajes de programacin, las funciones definidas por el usuario de son rutinas que aceptan parmetros, realizan una accin, como un clculo complejo, y devuelven el resultado de esa accin como un valor. El valor devuelto puede ser un valor escalar nico o un conjunto de resultados.
Funciones escalares.
Las funciones escalares son las ms parecidas a las funciones que se utilizan dentro de los lenguajes de programacin. Se utilizan bsicamente para clculos bsicos matemticos ya que devuelven un nico valor escalar. ejemplo: Calculo del IVA: --Creamos la funcion conel nombre IVA -- Indicamos el parmetro de entrada y tipo: @cantidad money Create function IVA (@cantidad money) Returns money -- Indicamos el tipo de parmetros que retornar la funcin. as -- Encapsulamos el conjunto de funciones dentro de un Begin y un end. Begin -- Dentro de la sentencia o funcion podemos manejar variables --aunque puede no ser necesario para ser ms eficiente la funcin. -- por cuestiones de ejemplo usamos la variable @resultado Declare @resultado money set @resultado = @cantidad * 0.16
-- Cuando terminamos la funcin ponemos el Return Return (@resultado) -- Y la variable que devolver la funcin @resultado. end
Para llamar a la funcin la llamamos con un nombre de dos partes, con el esquema.funcion mas el parametro que requiere la funcion:
Funciones con valores de tabla de varias instrucciones y Funciones con valores de tablas en lnea
A groso modo y solo para simplificar, son un hibrido entre vista y procedimiento almacenado, ya que suelen ser consultas con una instruccin select, pero que pueden recibir parmetros, cosa que no puede hacer una vista y si un procedimiento desde la versin sql server 2008 en adelante. Un procedimiento almacenado es ms poderoso, ya que puede encapsular insert, update, delete o un conjunto de instrucciones SQL De todas formas si se puede recomiendo que se trabajes con procedimientos almacenados en lugar de con funciones, dentro de lo posible... ya que desde sql 2008 se puedes pasar variables tipo tabla (arrays) a procedimientos almacenados... (http://microsoftsqlsecret.fullblog.com.ar/stored-procedure-with-array-parameters-comopasamos-variables-tipo-ta.html) Funciones con valores de tabla de varias instrucciones: --Creamos una funcin que se le ingrese por parmetro el pas y devuelva los clientes de ese pas: Create function ListadoPais (@pais varchar(100)) returns @clientes table -- Decimos que retornamos como resultado una variable de tipo tabla y la declaramos (customerid varchar(5), companyname varchar(50), -- Se definen las columnas que se necesiten contactname varchar(100), country varhcar(100) ) as -- Iniciamos la funcin. La variable tipo tabla @clientes es la que vamos a devolver como resultado de la funcin begin
Insertamos a la variabla tipo tabla @clientes: Insert @clientes select customerid, companyname, contactname, country from customers where country = @pais -- variable @pais de entrada en la funcin Return end
Funciones con valores de tablas en lnea: A diferencia de la anterior (funciones con valores de tabla), es una funcin con valores de tabla en lnea. Create funcion ListadoPais2 (@pais varchar(100)) returns table as return ( select customerid, companyname, contactname, country from customers where country = @pais )
Como todas las funciones definidas por el usuario, se crea con "create function" seguido del nombre que le damos a la funcin; luego declaramos los parmetros de entrada con su tipo de dato entre parntesis. El valor por defecto es opcional. "returns" especifica "table" como el tipo de datos a retornar. No se define el formato de la tabla a retornar porque queda establecido en el "select". El cuerpo de la funcin no contiene un bloque "begin...end" como las otras funciones. La clusula "return" contiene una sola instruccin "select" entre parntesis. El resultado del "select" es la tabla que se retorna. El "select" est sujeto a las mismas reglas que los "select" de las vistas. Creamos una funcin con valores de tabla en lnea que recibe un valor de autor como parmetro:
create function f_libros (@autor varchar(30)='Borges') returns table as return ( select titulo,editorial from libros where autor like '%'+@autor+'%'
);
Estas funciones retornan una tabla y se hace referencia a ellas en la clusula "from", como una vista:
select *from f_libros('Bach');
Recuerde a que todas las funciones que tienen definidos parmetros se les DEBE suministrar valores para ellos al invocarse. Recuerde que para que el parmetro tome el valor por defecto (si lo tiene) DEBE enviarse "default" al llamar a la funcin; si no le enviamos parmetros, SQL Server muestra un mensaje de error.
--incorrecto: select *from f_libros(); select *from f_libros(default);--correcto
Las funciones definidas por el usuario que devuelven un tipo de datos table pueden ser unas eficaces alternativas a las vistas. Esas funciones se conocen como funciones con valores de tabla. Una funcin definida por el usuario con valores de tabla se puede usar donde se permiten las expresiones de vista o de tabla en las consultas Transact-SQL. Mientras que las vistas se limitan a una nica instruccin SELECT, las funciones definidas por el usuario pueden contener instrucciones adicionales que permiten una lgica ms eficaz que en las vistas. Una funcin definida por el usuario con valores de tabla tambin puede reemplazar procedimientos almacenados que devuelven un solo conjunto de resultados. En la clusula FROM de una instruccin Transact-SQL es posible hacer referencia a la tabla que devuelve una funcin definida por el usuario, pero esto no es posible con los procedimientos almacenados que devuelven conjuntos de resultados.
Componentes de una funcin definida por el usuario con valores de tabla
La clusula RETURNS define el nombre de una variable de retorno local para la tabla devuelta por la funcin. La clusula RETURNS tambin define el formato de la tabla. El nombre de una variable de retorno local tiene un mbito local dentro de la funcin. Las instrucciones Transact-SQL del cuerpo de la funcin generan e insertan filas en la variable de retorno definida por la clusula RETURNS.
Al ejecutar una instruccin RETURN, las filas insertadas en la variable se devuelven desde la funcin en formato tabular. La instruccin RETURN no puede tener un argumento.
Ninguna instruccin Transact-SQL de una funcin con valores de tabla puede devolver un conjunto de resultados directamente a un usuario. La nica informacin que la funcin puede devolver al usuario es el tipo de datos table devuelto por la funcin.
Nota
La opcin de tabla text in row se define automticamente en 256 para una tabla devuelta por una funcin definida por el usuario. Esto no puede modificarse. Las instrucciones READTEXT, WRITETEXT y UPDATETEXT no pueden utilizarse para leer o escribir partes de las columnas text, ntext e image de la tabla. Para obtener ms informacin, vea Datos consecutivos.
Ejemplo
En el siguiente ejemplo se crea la funcin dbo.ufnGetContactInformation y se muestran los componentes de la funcin con valores de tabla. En esta funcin, el nombre de la variable de retorno local es @retContactInformation. Las instrucciones del cuerpo de la funcin insertan filas en esta variable para generar la tabla resultante devuelta por la funcin.
SQL Copiar
USE AdventureWorks2008R2; GO IF OBJECT_ID(N'dbo.ufnGetContactInformation', N'TF') IS NOT NULL DROP FUNCTION dbo.ufnGetContactInformation; GO CREATE FUNCTION dbo.ufnGetContactInformation(@ContactID int) RETURNS @retContactInformation TABLE ( -- Columns returned by the function ContactID int PRIMARY KEY NOT NULL, FirstName nvarchar(50) NULL, LastName nvarchar(50) NULL, JobTitle nvarchar(50) NULL, ContactType nvarchar(50) NULL ) AS -- Returns the first name, last name, job title, and contact type for the specified contact. BEGIN DECLARE @FirstName nvarchar(50), @LastName nvarchar(50), @JobTitle nvarchar(50), @ContactType nvarchar(50);
-- Get common contact information SELECT @ContactID = BusinessEntityID, @FirstName = FirstName, @LastName = LastName FROM Person.Person WHERE BusinessEntityID = @ContactID; -- Get contact job title SELECT @JobTitle = CASE -- Check for employee WHEN EXISTS(SELECT * FROM Person.Person AS p WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'EM') THEN (SELECT JobTitle FROM HumanResources.Employee AS e WHERE e.BusinessEntityID = @ContactID) -- Check for vendor WHEN EXISTS(SELECT * FROM Person.Person AS p WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'VC') THEN (SELECT ct.Name FROM Person.ContactType AS ct INNER JOIN Person.BusinessEntityContact AS bec ON bec.ContactTypeID = ct.ContactTypeID WHERE bec.PersonID = @ContactID) -- Check for store WHEN EXISTS(SELECT * FROM Person.Person AS p WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'SC') THEN (SELECT ct.Name FROM Person.ContactType AS ct INNER JOIN Person.BusinessEntityContact AS bec ON bec.ContactTypeID = ct.ContactTypeID WHERE bec.PersonID = @ContactID) ELSE NULL END; -- Get contact type SET @ContactType = CASE -- Check for employee WHEN EXISTS(SELECT * FROM Person.Person AS p WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'EM') THEN 'Employee' -- Check for vendor WHEN EXISTS(SELECT * FROM Person.Person AS p WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'VC') THEN 'Vendor Contact' -- Check for store WHEN EXISTS(SELECT * FROM Person.Person AS p WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'SC') THEN 'Store Contact' -- Check for individual consumer
WHEN EXISTS(SELECT * FROM Person.Person AS p WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'IN') THEN 'Consumer' -- Check for general contact WHEN EXISTS(SELECT * FROM Person.Person AS p WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'GC') THEN 'General Contact' END; -- Return the information to the caller IF @ContactID IS NOT NULL BEGIN INSERT @retContactInformation SELECT @ContactID, @FirstName, @LastName, @JobTitle, @ContactType; END; RETURN; END; GO
En el siguiente ejemplo se utiliza la funcin con valores de tabla dbo.ufnGetContactInformation en la clusula FROM de dos instrucciones SELECT.
SQL Copiar
USE AdventureWorks2008R2; GO SELECT ContactID, FirstName, LastName, JobTitle, ContactType FROM dbo.ufnGetContactInformation(1209); GO SELECT ContactID, FirstName, LastName, JobTitle, ContactType FROM dbo.ufnGetContactInformation(5); GO
Este tema an no ha recibido ninguna valoracin Valorar este tema Actualizado: 14 de abril de 2006
Las funciones definidas por el usuario se pueden invocar en consultas o en otras instrucciones o expresiones, como columnas calculadas o expresiones de cadena. Las funciones con valores escalares se pueden ejecutar mediante la instruccin EXECUTE.
Invocar funciones definidas por el usuario que devuelven un valor escalar
Puede invocar una funcin definida por el usuario que devuelve un valor escalar en cualquier parte de una expresin escalar del mismo tipo de datos que se permite en las instrucciones Transact-SQL. Las funciones con valores escalares deben invocarse como mnimo con el nombre de dos partes de la funcin. Para obtener ms informacin sobre los nombres con varias partes, vea Convenciones de sintaxis de Transact-SQL (Transact-SQL).
Consultas
En estas ubicaciones se permiten funciones definidas por el usuario que devuelven valores escalares:
GO SELECT ProductID, ListPrice, dbo.ufnGetProductDealerPrice(ProductID, StartDate) AS DealerPrice, StartDate, EndDate FROM Production.ProductListPriceHistory WHERE ListPrice > .0000 ORDER BY ProductID, StartDate; GO
Como group_by_expression en una clusula GROUP BY. Como order_by_expression en una clusula ORDER BY. Como expression en la clusula SET de una instruccin UPDATE: Copiar
USE AdventureWorks; GO UPDATE Production.ProductListPriceHistory SET ListPrice = dbo.ufnGetProductDealerPrice(ProductID, StartDate) WHERE ProductID > 900; GO
Como expression en la clusula VALUES de una instruccin INSERT: Las funciones definidas por el usuario a las que se hace referencia en estas ubicaciones se ejecutan lgicamente una vez por fila.
Restricciones CHECK
Las funciones definidas por el usuario que devuelven valores escalares se pueden invocar en restricciones CHECK si los valores de argumento transferidos a la funcin slo hacen referencia a columnas o constantes en la tabla. Cada vez que el procesador de consultas comprueba la restriccin, el procesador de consultas llama a la funcin con los valores de argumento asociados a la fila que se est comprobando actualmente. El propietario de una tabla tambin debe ser el propietario de la funcin definida por el usuario invocada por una restriccin CHECK de una tabla.
Definiciones DEFAULT
Las funciones definidas por el usuario se pueden invocar como constant_expression de definiciones DEFAULT si los valores de argumentos transferidos a la funcin slo contienen constantes. El propietario de la tabla tambin debe ser el propietario de la funcin definida por el usuario invocada por una definicin DEFAULT de una tabla.
Columnas calculadas
Es posible invocar funciones mediante columnas calculadas si los valores de argumentos transferidos a la funcin slo hacen referencia a columnas o constantes de una tabla. El propietario de la tabla tambin debe ser el propietario de la funcin definida por el usuario invocada por una columna calculada de una tabla.
Operadores de asignacin
Los operadores de asignacin (left_operand = right_operand) pueden invocar funciones definidas por el usuario que devuelven un valor escalar en la expresin especificada como operando derecho.
Instrucciones de control de flujo
Las funciones definidas por el usuario que devuelven valores escalares se pueden invocar mediante instrucciones de control de flujo en sus expresiones booleanas.
Expresiones CASE
Las funciones definidas por el usuario que devuelven un valor escalar se pueden invocar en cualquiera de las expresiones CASE.
Instrucciones PRINT
Las funciones definidas por el usuario que devuelven una cadena de caracteres se pueden invocar como expresin string_expr de instrucciones PRINT.
Funciones y procedimientos almacenados
Los argumentos de funciones tambin pueden hacer referencia a una funcin definida por el usuario que devuelve un valor escalar. Las instrucciones RETURN integer_expression de procedimientos almacenados pueden llamar a funciones definidas por el usuario que devuelven un entero como integer_expression. Las instrucciones RETURN return_type_spec de funciones definidas por el usuario pueden invocar a funciones definidas por el usuario que devuelven un tipo de datos escalar como return_type_spec, con tal de que el valor devuelto por la funcin definida por el usuario
que se invoca pueda convertirse implcitamente en el tipo de datos de vuelta de la funcin que realiza la invocacin. Ejecutar funciones definidas por el usuario que devuelven un valor escalar
Puede ejecutar funciones definidas por el usuario que devuelven valores escalares de la misma forma que si se tratara de procedimientos almacenados. Cuando ejecute una funcin definida por el usuario que devuelve un valor escalar, los parmetros se especifican del mismo modo que para los procedimientos almacenados:
Los valores de argumento no se incluyen entre parntesis. Se pueden especificar nombres de parmetros. Si se especifican nombres de parmetros, los valores de argumento no tienen que estar en la misma secuencia que los parmetros.
En el siguiente ejemplo se crea una funcin definida por el usuario que devuelve un valor escalar decimal.
Copiar
IF OBJECT_ID(N'dbo.ufn_CubicVolume', N'FN') IS NOT NULL DROP FUNCTION dbo.ufn_CubicVolume; GO CREATE FUNCTION dbo.ufn_CubicVolume -- Input dimensions in centimeters. (@CubeLength decimal(4,1), @CubeWidth decimal(4,1), @CubeHeight decimal(4,1) ) RETURNS decimal(12,3) -- Cubic Centimeters. WITH SCHEMABINDING AS BEGIN RETURN ( @CubeLength * @CubeWidth * @CubeHeight ) END; GO
El siguiente ejemplo ejecuta la funcin dbo.ufn_CubicVolume. Mediante la instruccin EXECUTE de Transact-SQL, los argumentos se identifican en un orden distinto al de los parmetros en la definicin de la funcin:
Copiar
DECLARE @MyDecimalVar decimal(12,3); EXEC @MyDecimalVar = dbo.ufn_CubicVolume @CubeLength = 12.3, @CubeHeight = 4.5, @CubeWidth = 4.5; SELECT @MyDecimalVar; GO
El siguiente ejemplo ejecuta la funcin dbo.ufn_CubicVolume sin especificar los nombres de parmetros:
Copiar
DECLARE @MyDecimalVar decimal(12,3); EXEC @MyDecimalVar = dbo.ufn_CubicVolume 12.3, 4.5, 4.5; SELECT @MyDecimalVar; GO
Tambin puede utilizar la sintaxis CALL de ODBC para ejecutar la funcin dbo.ufn_CubicVolume desde aplicaciones OLE DB u ODBC:
Copiar
-- First use SQLBindParam to bind the return value parameter marker -- to a program variable of the appropriate type SQLExecDirect(hstmt, "{ CALL ? = dbo.ufn_CubicVolume(12.3, 4.5, 4.5) }", SQL_NTS);
Invocar funciones definidas por el usuario que devuelven un tipo de datos table
Puede invocar una funcin definida por el usuario que devuelve una table, donde se permiten expresiones de tabla en la clusula FROM de instrucciones SELECT, INSERT, UPDATE o DELETE. Una invocacin de una funcin definida por el usuario que devuelve una tabla puede estar seguida de un alias de tabla opcional. En el ejemplo siguiente se ilustra la llamada a la funcin con valores de tabla dbo.ufnGetContactInformation en la clusula FROM de una instruccin SELECT.
Copiar
USE AdventureWorks; GO SELECT ContactID, FirstName, LastName, JobTitle, ContactType FROM dbo.ufnGetContactInformation(2200); GO SELECT ContactID, FirstName, LastName, JobTitle, ContactType FROM dbo.ufnGetContactInformation(5); GO
Cuando una funcin definida por el usuario que devuelve una tabla (table) se invoca en la clusula FROM de una subconsulta, los argumentos de la funcin no pueden hacer referencia a columnas de la consulta externa.
Los cursores estticos de slo lectura son el nico tipo de cursor que se puede abrir en una instruccin SELECT cuya clusula FROM hace referencia a una funcin definida por el usuario que devuelve una tabla. Una instruccin SELECT que hace referencia a una funcin definida por el usuario que devuelve una table invoca la funcin una sola vez.
Invocar funciones integradas con valores de tabla
Existen varias funciones integradas con valores de tabla que devuelven un valor de tabla. La invocacin de estas funciones integradas definidas por el usuario pueden estar no calificadas o utilizar el calificador de esquema sys. Debe utilizar el calificador de esquema sys para funciones integradas con valores de tabla, porque evita conflictos con funciones definidas por el usuario con el mismo nombre. En el siguiente ejemplo se muestra cmo invocar la funcin integrada del sistema fn_helpcollations.
Copiar
SELECT * FROM sys.fn_helpcollations(); GO
Al crear una funcin definida por el usuario, puede aplicar una sugerencia de tabla en las consultas que conforman la definicin de la funcin. Las sugerencias que se aplican a vistas que hacen referencia a funciones con valores de tabla de Transact-SQL tambin se aplican a las funciones. Estas funciones pueden entrar en conflicto con las sugerencias de la definicin de la funcin. Para obtener ms informacin, vea Resolucin de vistas. No puede aplicar sugerencias en vistas que hacen referencia a funciones con valores de tabla de CLR.
Nota: La posibilidad de que el Database Engine (Motor de base de datos) aplique sugerencias de vistas a funciones con valores de tabla de mltiples instrucciones que forman parte de la definicin de vista se quitar en una versin futura de SQL Server.
No se puede aplicar una sugerencia de tabla al resultado de ninguna funcin con valores de tabla de la clusula FROM de una consulta.