此时我有两个问题要问
为了使问题更清楚,我在C#
中添加了一小段代码来调用方法,在调用函数之前,参数的数量是未知的。请原谅。
public void DemoFunction(string name,params string[] list)
{
for (int i = 0; i < list.Length; i++)
{
// Do whatever we want
}
}
在C#中我们可以调用上面的方法,如
DemoFunction("MyName","A","B",....etc etc)
问题1
我可以在Sql Server函数中定义动态参数,就像我上面给出的C#
代码(params string[] list
)一样吗?
CREATE FUNCTION [dbo].ExecStoredProc ( @ProcName varchar(40),@Param1 INT,@Param2 VARCHAR(50))
(
....
....
....
)
问题2
stored procedure
的名称将传递给此function
。stored procedure
的参数将传递给此function
,但应该是动态的(如问题1所示)stored procedure
内动态地执行作为参数传递给此函数的function
,并将结果作为表返回。 这是我到目前为止尝试过的代码
-- Here the parameters should be dynamic as like params string[] list
CREATE FUNCTION [dbo].ExecStoredProc (@ProcName varchar(40),@Param1 INT,@Param2 VARCHAR(50))
RETURNS @ReturnTable TABLE
(
COLUMN1 INT
,COLUMN2 DATETIME
,COLUMN3 VARCHAR(50)
)
AS
BEGIN
-- Is it possible like SELECT * INTO @ReturnTable FROM(Exec @ProcName)?
INSERT INTO @ReturnTable
-- This should be dynamic including the number of parameters
Exec @ProcName 'Params'
RETURN
END
答案 0 :(得分:2)
简而言之......
问题1 不,您不能像在C#
中那样在SQL中声明动态参数问题2 用户定义的函数中不允许执行EXEC。在函数中执行过程的唯一方法是调用CLR。
用户定义的表值函数返回的表是静态的,并在return语句中声明。您无法返回动态列。
阅读有关SQL用户定义函数here
的更多信息希望有所帮助