我有一个名为My_StoredProcedure
的存储过程,如下所示:
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 :(得分: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#中使用一些正则表达式完成的。