Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Passer la table en tant que paramètre dans l'UDF du serveur sql

Vous pouvez, cependant, n'importe quelle table. À partir de la documentation :

Pour les fonctions Transact-SQL, tous les types de données, y compris les types CLR définis par l'utilisateur et les types de table définis par l'utilisateur, sont autorisés à l'exception du type de données timestamp.

Vous pouvez utiliser des types de tableaux définis par l'utilisateur .

Exemple de type de tableau défini par l'utilisateur :

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

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

Donc ce que vous pouvez faire est de définir votre type de table, par exemple TableType et définir la fonction qui prend le paramètre de ce type. Un exemple de fonction :

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

Le paramètre doit être READONLY. Et exemple d'utilisation :

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

SELECT dbo.Example(@myTable)

Selon ce que vous voulez réaliser, vous pouvez modifier ce code.

MODIF : Si vous avez des données dans un tableau, vous pouvez créer une variable :

DECLARE @myTable TableType

Et prenez les données de votre table vers la variable

INSERT INTO @myTable(field_name)
SELECT field_name_2 FROM my_other_table