Sql 将存储过程转换为用户定义的函数

Sql 将存储过程转换为用户定义的函数,sql,sql-server,sql-server-2014-express,Sql,Sql Server,Sql Server 2014 Express,我试图将一个过程转换为一个函数,该函数从一个表中选择n个参数,并为每n个参数从另一个表中选择k个列名。最后,它必须创建一个包含一些固定列+n*k列的表,这些列随输入参数的变化而变化。k对于每个n也是不同的。我使用动态创建的查询编写了这个过程 对于这个函数,我想我可以运行一个游标或while循环来获取每个n,并将相应的列名输入到一个表变量中。在循环中声明变量并设置它们的值感觉像是一种有效的方法 最后,我将透视变量并将它们连接起来以形成所需的表。 问题就在这里。声明,或者即使我已经声明了它们,然后依

我试图将一个过程转换为一个函数,该函数从一个表中选择n个参数,并为每n个参数从另一个表中选择k个列名。最后,它必须创建一个包含一些固定列+n*k列的表,这些列随输入参数的变化而变化。k对于每个n也是不同的。我使用动态创建的查询编写了这个过程

对于这个函数,我想我可以运行一个游标或while循环来获取每个n,并将相应的列名输入到一个表变量中。在循环中声明变量并设置它们的值感觉像是一种有效的方法

最后,我将透视变量并将它们连接起来以形成所需的表。 问题就在这里。声明,或者即使我已经声明了它们,然后依次调用循环中的表变量来分配它们

{
Declare @plan_section table (
    Roll identity (1,1)
    Plan_id int
    Plan_section_id int
)

Insert into @plan_section
Select plan_id, plan_section_id from t_plan_section where plan_id=@plan_id

Declare @n int, @plan_count int
Set @n =1
Set @plan_count = (select count(plan_section_id) from t_plan_section where plan_id = @plan_id)

While @n<@plan_count
Begin

Declare  Variable_’+cast(@n, varchar(2))+’       table ( ‘@plan_section_name’ varchar(100) )
Insert into     variable_’+@n+’
Select metric from t_plan_section_metric a join @plan_section b using(plan_section_id) where b.roll = @n

set @n = @n+1

End
}
这里有一个我使用过但不起作用的查询片段

请考虑与每个PrimeId对应的n个计划段,并将K列名称检索到循环内声明的n个表变量。


欢迎提出任何建议。如果你有另一种方法,当然要共享。

请考虑添加一些你所使用的例子。使用函数,我们不能创建表或临时表,它只支持表变量。我只使用表变量。它不起作用。它以什么方式不起作用?AFAICT函数返回的表变量中不能有动态数量的列。它在声明变量的“+”附近表示语法错误。还有很多后续的废话。