Sql server 如何传递参数以动态运行并动态执行存储过程

Sql server 如何传递参数以动态运行并动态执行存储过程,sql-server,sql-server-2008,function,stored-procedures,Sql Server,Sql Server 2008,Function,Stored Procedures,现在我有两个问题要问 如果在调用函数之前参数数量未知,如何将参数传递给该函数?(SQL Server 2008) 如何在函数和返回表中动态执行存储过程 为了让问题更清楚,我添加了一小段代码,用于调用C中的方法,在调用函数之前,参数的数量是未知的。请原谅 public void DemoFunction(string name,params string[] list) { for (int i = 0; i < list.Length; i++) { //

现在我有两个问题要问

  • 如果在调用函数之前参数数量未知,如何将参数传递给该函数?(SQL Server 2008)
  • 如何在函数和返回表中动态执行存储过程
  • 为了让问题更清楚,我添加了一小段代码,用于调用
    C
    中的方法,在调用函数之前,参数的数量是未知的。请原谅

    public void DemoFunction(string name,params string[] list)
    {
        for (int i = 0; i < list.Length; i++)
        {
            // Do whatever we want
        }        
    }
    
    问题1

    我能否在Sql Server函数中定义动态参数,就像我在上面给出的代码(
    params string[]list
    )一样

    问题2

    • 要执行的
      存储过程
      的名称将传递到此
      函数
    • 执行
      存储过程
      的参数将被传递到此
      函数
      ,但应是动态的(如问题1所示)
    • 我需要执行
      存储过程
      ,该过程在
      函数
      中作为参数动态传递到此函数,并将结果作为表返回
    • 在执行过程之前,列数未知的情况下,如何声明用于返回结果的表
    这是我迄今为止尝试过的代码

     -- 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 不,您不能像在C中那样在SQL中声明动态参数#

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

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

    了解有关SQL用户定义函数的更多信息

    希望有帮助

    CREATE FUNCTION [dbo].ExecStoredProc ( @ProcName varchar(40),@Param1 INT,@Param2 VARCHAR(50))
    (
        ....
        ....
        ....
    )
    
     -- 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