Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Passa la tabella come parametro nell'UDF del server sql

È possibile, tuttavia, nessun tavolo. Dalla documentazione:

Per le funzioni Transact-SQL, tutti i tipi di dati, inclusi i tipi CLR definiti dall'utente e i tipi di tabella definiti dall'utente, sono consentiti ad eccezione del tipo di dati timestamp.

Puoi utilizzare tipi di tabella definiti dall'utente .

Esempio di tipo di tabella definito dall'utente:

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

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

Quindi quello che puoi fare è definire il tuo tipo di tabella, ad esempio TableType e definire la funzione che accetta il parametro di questo tipo. Una funzione di esempio:

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

Il parametro deve essere SOLO LETTURA. E un esempio di utilizzo:

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

SELECT dbo.Example(@myTable)

A seconda di cosa vuoi ottenere puoi modificare questo codice.

MODIFICA: Se hai un dato in una tabella puoi creare una variabile:

DECLARE @myTable TableType

E trasferisci i dati dalla tua tabella alla variabile

INSERT INTO @myTable(field_name)
SELECT field_name_2 FROM my_other_table