Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Passar tabela como parâmetro no sql server UDF


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