如何动态传递参数以动态执行存储过程

时间:2014-12-24 07:28:08

标签: sql-server sql-server-2008 function stored-procedures

此时我有两个问题要问

  1. 如何在调用函数之前将参数传递给参数数量未知的函数?(SQL Server 2008)
  2. 如何在函数内部动态执行存储过程并返回表?
  3. 为了使问题更清楚,我在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
    

1 个答案:

答案 0 :(得分:2)

简而言之......

问题1 不,您不能像在C#

中那样在SQL中声明动态参数

问题2 用户定义的函数中不允许执行EXEC。在函数中执行过程的唯一方法是调用CLR。

用户定义的表值函数返回的表是静态的,并在return语句中声明。您无法返回动态列。

阅读有关SQL用户定义函数here

的更多信息

希望有所帮助