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