将函数结果分配给表变量

时间:2009-01-21 05:45:13

标签: sql stored-procedures dynamic-queries

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 个答案:

答案 0 :(得分:3)

关闭循环...

这是调用函数并将这些结果放在表变量

中的语法

@simons解决方案的小型构建

这是在sql2012和sql2014上运行的。

[别忘了关闭表格声明。如果你把桌子全部放在一条线上就足够了。 ]

declare @t table(field1  nvarchar(100) )

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

答案 1 :(得分:1)

我不确定它如何与函数一起使用,但是如果你有一个返回结果集的存储过程,你可以使用INSERT EXEC语句将它插入到表变量中。

INSERT @TableVariable
EXEC spYourProcedure

只要字段匹配即可。否则你可以使用:

INSERT @TableVariable (FieldInSp1, FieldInSp2)
EXEC spYourProcedure

这样您就可以在存储过程之间传递数据。有关其他信息,请参阅INSERT EXEC Statements上的此页面。

答案 2 :(得分:1)

您不能在用户定义的函数中使用“exec”。 UDF必须是无副作用的。