sql >> Databáze >  >> RDS >> Sqlserver

Předejte tabulku jako parametr do UDF serveru SQL

Můžete, ale žádný stůl. Z dokumentace:

Pro funkce Transact-SQL jsou povoleny všechny datové typy, včetně uživatelsky definovaných typů CLR a uživatelsky definovaných typů tabulek, kromě datového typu časové razítko.

Můžete použít uživatelem definované typy tabulek .

Příklad uživatelem definovaného typu tabulky:

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

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

Takže co můžete udělat, je definovat typ tabulky, například TableType a definujte funkci, která přebírá parametr tohoto typu. Příklad funkce:

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

Parametr musí být pouze pro čtení. A příklad použití:

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

SELECT dbo.Example(@myTable)

V závislosti na tom, čeho chcete dosáhnout, můžete tento kód upravit.

UPRAVIT: Pokud máte data v tabulce, můžete vytvořit proměnnou:

DECLARE @myTable TableType

A převezměte data z tabulky do proměnné

INSERT INTO @myTable(field_name)
SELECT field_name_2 FROM my_other_table


  1. mysql vyberte z n posledních řádků

  2. Jak vytvořím krok v mé SQL Server Agent Job, který spustí můj balíček SSIS?

  3. Jak zobrazit skutečný příkaz Oracle SQL, který se provádí

  4. Algoritmus řazení SQL Server GUID. Proč?