2014-12-24 88 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

希望幫助