sql >> Base de Datos >  >> RDS >> Sqlserver

Pase la tabla como parámetro en el servidor sql UDF

Puede, sin embargo, ninguna mesa. De la documentación:

Para las funciones de Transact-SQL, se permiten todos los tipos de datos, incluidos los tipos definidos por el usuario de CLR y los tipos de tabla definidos por el usuario, excepto el tipo de datos de marca de tiempo.

Puede usar tipos de tabla definidos por el usuario .

Ejemplo de tipo de tabla definida por el usuario:

CREATE TYPE TableType 
AS TABLE (LocationName VARCHAR(50))
GO 

DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable

Entonces, lo que puede hacer es definir su tipo de tabla, por ejemplo TableType y definir la función que toma el parámetro de este tipo. Una función de ejemplo:

CREATE FUNCTION Example( @TableName TableType READONLY)
RETURNS VARCHAR(50)
AS
BEGIN
    DECLARE @name VARCHAR(50)

    SELECT TOP 1 @name = LocationName FROM @TableName
    RETURN @name
END

El parámetro tiene que ser READONLY. Y ejemplo de uso:

DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable

SELECT dbo.Example(@myTable)

Dependiendo de lo que quieras lograr, puedes modificar este código.

EDITAR: Si tiene datos en una tabla, puede crear una variable:

DECLARE @myTable TableType

Y lleva datos de tu tabla a la variable

INSERT INTO @myTable(field_name)
SELECT field_name_2 FROM my_other_table