Присвойте результат функции табличной переменной

Функция 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

-1. Не используйте таким образом динамический Sql. Обратитесь к sommarskog: sommarskog.se/dynamic_sql.html

Amy B 21.01.2009 09:16

+1. @David: Он спрашивает, не надо отрицать, потому что он неправ.

Eduardo Molteni 21.01.2009 21:25
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
2
12 364
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

INSERT @TableVariable
EXEC spYourProcedure

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

INSERT @TableVariable (FieldInSp1, FieldInSp2)
EXEC spYourProcedure

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

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

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

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

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

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

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

declare @t table(field1  nvarchar(100) )

insert @t select * from dbo.Cool_1Field_Function( 'parm1' ,'parm2')
select * from @t

Это должен быть правильный ответ. Это единственный, который использует функцию, а не процедуру.

Storm Muller 09.04.2018 10:38

жаль, что вы не можете сделать: declare @t table(field1 nvarchar(100) ) = dbo.Cool_1Field_Function( 'parm1' ,'parm2')

costa 18.08.2020 04:02

@costa, добавь это в список «то, что было бы круто, если ...». У меня есть разумный список для sql :-)

greg 22.08.2020 02:53

Другие вопросы по теме