我想调用存储过程或用户定义的函数,该函数返回通过pivot表达式创建的动态表。我不知道前面的列数。
这可能吗? (我对临时表不感兴趣)
答案 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)
是的,您可以从存储过程执行此操作,但不能从用户定义的函数执行此操作。值得研究表值函数,我相信你也可以从那里返回一个动态表,但我自己没有用它。