No meu procedimento armazenado, tenho variável de tabela com muitas colunas. Porque eu quero simplificar o procedimento armazenado, pensei que poderia declarar a variável da tabela em uma função como
CREATE FUNCTION [dbo].[ufn_DeclareMaterialTableVariable]
(
)
RETURNS @returntable TABLE
(
[Id] [int] NULL,
[Number] [int] NOT NULL,
[Name] [nvarchar](255) NULL,
... dozens of columns
)
AS
BEGIN
RETURN
END
mas percebi que não sei, como usá-lo. Minha ideia era algo como
select *
into @table
from [dbo].[ufn_DeclareMaterialTableVariable]
mas isso não vai funcionar, a menos que eu use uma tabela temporária.
A segunda ideia é declarar a tabela com o tipo de dados personalizado.
declare @table TABLE as CustomTableType
mas isso também não está funcionando. Qualquer ideia ?
Você precisa declarar uma variável de tabela com a mesma forma que o resultado TVF, então use
INSERT INTO
notSELECT INTO
e lembre-se de adicionar colchetes/parênteses ao final do nome da função ao invocá-la, ou seja,Foo()
não apenasFoo
:Se você declarou um tipo de tabela, a sintaxe para declarar uma variável desse tipo é a seguinte (observe nenhuma palavra-
TABLE
chave);Dito isso, irritantemente, você não pode declarar o tipo de resultado de um TVF como um tipo de tabela - ou seja, você sempre precisa declarar as colunas retornadas novamente, explicitamente - o que nega parcialmente o ponto do tipo personalizado em primeiro lugar, em essa situação.