Estou alterando function
como:
ALTER FUNCTION [dbo].[fn_CalculateListing](@Listing TypeListingDatePrice READONLY)
RETURNS TypePreviousListingResult
AS
BEGIN
DECLARE @tbl_ListingDateDetails TypePreviousListingResult
RETURN @tbl_ListingDateDetails
END
GO
Mas jogando erro como:
Msg 137, Level 16, State 1, Procedure fn_CalculateListing, Line 6
Must declare the scalar variable "@tbl_ListingDateDetails".
Por que está dando erro e pedindo declaração mesmo eu tendo declarado isso antes de usar aquela variável?
TypePreviousListingResult é um tipo de tabela criado como CREATE TYPE TypePreviousListingResult AS TABLE...
.
Pergunta anterior: Como escrever uma função em sql que aceita tabela como entrada e retorna o resultado como tabela?
Existem dois problemas aqui:
Para TVFs com várias instruções, você só precisa,
RETURN;
em vez deRETURN @variable;
.Não parece que você pode usar um tipo de tabela definida pelo usuário (UDTT) como o tipo de tabela de retorno. Isso precisará ser especificado explicitamente (ou seja, cada nome de coluna e tipo de dados).
Se fosse uma UDF escalar, a sintaxe de especificar apenas o nome do tipo de dados na
RETURNS
cláusula e especificar o nome da variável naRETURN
instrução estaria correta. No entanto, você não pode retornarTABLE
(ouCURSOR
) tipos de uma UDF escalar.Consulte a página do MSDN para CREATE FUNCTION para obter mais detalhes.
Você vai precisar de algo na linha de:
Para obter uma discussão mais ampla sobre as técnicas disponíveis para passar conjuntos de linhas, consulte: Como compartilhar dados entre procedimentos armazenados por Erland Sommarskog .