2014-02-14 42 views
0

我有一個名爲My_StoredProcedure這樣一個存儲過程:如何返回SqlCommand存儲過程執行的語法?

create proc My_StoredProcedure (val1 int, val2 int) 
as 
    insert into mytable values (val1,val2) 

,我需要得到這個存儲過程的語法,如果有錯誤的執行

得不到存儲過程的名稱

這是我的代碼

cmd = new SqlCommand("My_StoredProcedure", cn); 
cn.open(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddWithValue("val1",1); 
cmd.Parameters.AddWithValue("val2",2); 

try 
{ 
    cmd.ExecuteNonQuery(); 
} 
catch (Exception ex) 
{ 
    return ???(what stored procedure executed syntax)???; 
} 
+0

你能舉一個你期望得到回報的例子嗎?例如你想要字符串「My_StoredProcedure(@ val1 = 1,@ val2 = 2)」嗎? – richaux

+0

你想要完整的存儲過程定義,還是像'My_StoredProcedure @ val1 = 1,@ val2 = 2'? – Bryan

+0

@ beargle我想看到所有的存儲過程,如**插入到mytable值(val1,val2)** – user3216738

回答

0

我想你想定義的程序未能執行?您可以通過查詢sys.sql_modules

try 
{ 
    cmd.ExecuteNonQuery(); 
} 
catch (Exception ex) 
{ 
    var sql = "select top (1) [definition] " + 
       "from sys.sql_modules m " + 
       "join sys.objects o " + 
       "on m.object_id = o.object_id " + 
       "where o.name = 'My_StoredProcedure' "; 

    var qry = new SqlCommand(sql, conn); 

    var rdr = qry.ExecuteReader(CommandBehavior.SingleRow); 

    string definition = null; 

    while(rdr .Read()) 
    { 
     definition = rdr["definition"].ToString(); 
    } 
} 

得到這個或查詢可以使用sys.objects

SELECT OBJECT_DEFINTION(object_id) 
FROM sys.objects 
WHERE name = 'My_StoredProcedure' 
AND [type] IN ('P', 'PC') 

要「乾淨」的定義,即擺脫CREATE PROC是可能比較容易在C#中做一些正則表達式。

相關問題