2014-12-24 55 views
0

我有两个问题要问在这一点上我如何通过paramters动态运作和执行存储过程的动态

  1. 我如何通过参数的函数,其中的参数的数量是未知的,直到该功能调用?(SQL Server 2008)
  2. 如何在函数和返回表中动态执行存储过程?

为了使问题更加清楚,我在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参数将(问题1如)
  • 我需要执行stored procedure时动态传递作为参数传递给该功能的function内部并返回结果作为被传递到这个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 

回答

2

总之代码....

问题1 不,你可以不喜欢,你可以在C#中声明SQL动态参数

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

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

了解更多关于SQL用户定义的函数here

希望帮助