Você pode, porém não qualquer mesa. Da documentação:
Para funções Transact-SQL, todos os tipos de dados, incluindo tipos CLR definidos pelo usuário e tipos de tabela definidos pelo usuário, são permitidos, exceto o tipo de dados timestamp.
Você pode usar tipos de tabela definidos pelo usuário .
Exemplo de tipo de tabela definido pelo usuário:
CREATE TYPE TableType
AS TABLE (LocationName VARCHAR(50))
GO
DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable
Então o que você pode fazer é definir seu tipo de tabela, por exemplo
TableType
e defina a função que recebe o parâmetro desse tipo. Uma função de exemplo: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
O parâmetro deve ser READONLY. E exemplo de uso:
DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable
SELECT dbo.Example(@myTable)
Dependendo do que você deseja alcançar, você pode modificar este código.
EDITAR: Se você tiver dados em uma tabela, você pode criar uma variável:
DECLARE @myTable TableType
E leve os dados da sua tabela para a variável
INSERT INTO @myTable(field_name)
SELECT field_name_2 FROM my_other_table