Назначить результат функции для табличной переменной - PullRequest
2 голосов
/ 21 января 2009

Функция SQL Server (2000/2005) получает имя таблицы и имя поля в качестве параметров и возвращает результаты динамического запроса в функции. Результаты должны быть присвоены переменной Table, которая будет использоваться в дальнейшем в хранимой процедуре. Как этого добиться?

Я получаю сообщение об ошибке: «Из функции могут выполняться только функции и расширенные хранимые процедуры».

Declare @Data as table (FieldValue varchar(100))
insert into @Data select * from MyFunction ('Person.Address','AddressID')     

-- Function
Alter function MyFunction (
   @TableName varchar(100), @FieldName varchar(100) 
) returns @GetData table (
   FieldValue  varchar(100) 
) as
begin
        Declare @SQL varchar(250)
        Set @SQL = 'Select '+@FieldName+ ' from '+ @TableName
        Exec sp_executesql @SQL     
        return
end

Ответы [ 3 ]

3 голосов
/ 12 декабря 2016

просто чтобы замкнуть петлю ...

вот синтаксис для вызова функции и помещения этих результатов в табличную переменную

небольшая сборка на основе решения @simons

это работало на sql2012 и sql2014.

[не забудьте закрыть оператор таблицы. Это достаточно просто сделать, если у вас есть все таблицы в одной строке. ]

declare @t table(field1  nvarchar(100) )

insert @t select * from dbo.Cool_1Field_Function( 'parm1' ,'parm2')
select * from @t
1 голос
/ 21 января 2009

Вы не можете использовать "exec" в пользовательской функции. UDF не должны иметь побочных эффектов.

1 голос
/ 21 января 2009

Я не уверен, как это работает с функциями, но если у вас есть хранимая процедура, которая возвращает набор результатов, вы можете вставить ее в переменную таблицы, используя операторы INSERT EXEC.

INSERT @TableVariable
EXEC spYourProcedure

Пока поля совпадают, это будет работать. В противном случае вы можете использовать:

INSERT @TableVariable (FieldInSp1, FieldInSp2)
EXEC spYourProcedure

Таким образом, вы можете передавать данные между хранимыми процедурами. См. Эту страницу на INSERT EXEC Заявления для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...