SQL Server中的函数或存储过程是否可以返回动态表?

时间:2011-05-11 14:48:59

标签: sql-server

我想调用存储过程或用户定义的函数,该函数返回通过pivot表达式创建的动态表。我不知道前面的列数。

这可能吗? (我对临时表不感兴趣)

3 个答案:

答案 0 :(得分:3)

你可以通过存储过程来实现,因为它可以返回任何类型的表,问题是你想要实现什么以及你将如何处理你不知道的数据?

答案 1 :(得分:2)

这不能用函数完成(因为必须预先定义返回的表结构),但可以使用存储的进行完成。一些伪代码:

CREATE PROCEDURE Foo

As

DECLARE @Command

SET @Command = 'SELECT * from MyTable'

-- For debugging, work in an optional PRINT @Command statement
EXECUTE (@Command)

RETURN 0

当您运行存储过程Foo时,它会将您的查询构建为@Command中的字符串,然后在不知道正在查询或返回的内容的情况下动态执行它,并且该EXECUTE语句返回的数据集将“传回” “对于调用程序的过程。

小心地构建您的查询,这些东西可能很难调试。根据您的实现,它可能是SQL注入攻击的来源(请记住,存储过程实际上不知道动态查询将要做什么)。对于快速的东西,EXECUTE()工作正常,但为了更安全,更有用(如果精心设计)解决方案,请查看sp_ExecuteSQL

答案 2 :(得分:0)

是的,您可以从存储过程执行此操作,但不能从用户定义的函数执行此操作。值得研究表值函数,我相信你也可以从那里返回一个动态表,但我自己没有用它。