Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Übergeben Sie die Tabelle als Parameter an die SQL-Server-UDF

Sie können jedoch keinen beliebigen Tisch einnehmen. Aus Dokumentation:

Für Transact-SQL-Funktionen sind alle Datentypen, einschließlich benutzerdefinierter CLR-Typen und benutzerdefinierter Tabellentypen, mit Ausnahme des Zeitstempel-Datentyps zulässig.

Sie können benutzerdefinierte Tabellentypen verwenden .

Beispiel für einen benutzerdefinierten Tabellentyp:

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

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

Sie können also Ihren Tabellentyp definieren, zum Beispiel TableType und definieren Sie die Funktion, die den Parameter dieses Typs übernimmt. Eine Beispielfunktion:

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

Der Parameter muss READONLY sein. Und Beispielverwendung:

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

SELECT dbo.Example(@myTable)

Je nachdem, was Sie erreichen möchten, können Sie diesen Code ändern.

BEARBEITEN: Wenn Sie Daten in einer Tabelle haben, können Sie eine Variable erstellen:

DECLARE @myTable TableType

Und nehmen Sie Daten aus Ihrer Tabelle in die Variable

INSERT INTO @myTable(field_name)
SELECT field_name_2 FROM my_other_table