sql - valores - Asignar el resultado de la función a una variable de tabla
variable tipo tabla sql server (3)
La función SQL Server (2000/2005) obtiene el nombre de la tabla y el nombre del campo como parámetros y devuelve los resultados de una consulta dinámica dentro de la función. Los resultados se deben asignar a una variable de Table
que se utilizará más en un procedimiento almacenado. ¿Cómo lograr esto?
Recibo un error: "Solo las funciones y los procedimientos almacenados extendidos se pueden ejecutar desde una función".
Declare @Data as table (FieldValue varchar(100))
insert into @Data select * from MyFunction (''Person.Address'',''AddressID'')
-- Function
Alter function MyFunction (
@TableName varchar(100), @FieldName varchar(100)
) returns @GetData table (
FieldValue varchar(100)
) as
begin
Declare @SQL varchar(250)
Set @SQL = ''Select ''+@FieldName+ '' from ''+ @TableName
Exec sp_executesql @SQL
return
end
solo para cerrar el ciclo ...
aquí está la sintaxis para llamar a la función y poner esos resultados en una variable de tabla
pequeña versión de la solución @simons
esto funcionó en sql2012 y sql2014.
[no te olvides de cerrar la declaración de la tabla. Lo suficientemente fácil de hacer si tiene la tabla en una sola línea. ]
declare @t table(field1 nvarchar(100) )
insert @t select * from dbo.Cool_1Field_Function( ''parm1'' ,''parm2'')
select * from @t
No estoy seguro de cómo funciona esto con las funciones, pero si tiene un Procedimiento almacenado que devuelve un conjunto de resultados, puede insertarlo en una variable de tabla utilizando las instrucciones INSERT EXEC.
INSERT @TableVariable
EXEC spYourProcedure
Mientras los campos coincidan, eso funcionará. De lo contrario, puede usar:
INSERT @TableVariable (FieldInSp1, FieldInSp2)
EXEC spYourProcedure
De esta manera puede pasar datos entre procedimientos almacenados. Consulte esta página en INSERTAR declaraciones EXEC para obtener información adicional.
No puede usar "exec" en una función definida por el usuario. Las UDF deben estar libres de efectos secundarios.