我编写了一个DbContext
扩展名来尝试确定其关联数据库中是否存在存储过程。
public static bool StoredProcedureExists(this DbContext input, string name)
{
int exists = input.Database.ExecuteSqlCommand(string.Format("SELECT TOP 1 * FROM [sys].[objects] WHERE [type_desc] = 'SQL_STORED_PROCEDURE' AND [name] = '{0}';", name));
//return true; // if it exists, else false
}
问题是:无论存储过程name
是否存在,我的exists
变量(从ExecSqlCommand
返回)始终包含“-1”。所以我无法确定存储过程是否在数据库中。
在SQL Server Management Studio中执行生成的查询按预期工作,如果存储过程存在则返回一行,如果不存在则返回行。
有没有人对如何实现这一点有任何想法(以编程方式确定数据库中是否存在存储过程)?
由于 罗布
答案 0 :(得分:5)
感谢您的帮助......最后我按照以下方式开始工作:
public static bool StoredProcedureExists(this DbContext input, string name)
{
var query = input.Database.SqlQuery(
typeof(int),
string.Format("SELECT COUNT(*) FROM [sys].[objects] WHERE [type_desc] = 'SQL_STORED_PROCEDURE' AND [name] = '{0}';", name),
new object[] {});
int exists = query.Cast<int>()
.Single();
return (exists > 0);
}
答案 1 :(得分:0)
您可以执行存储过程,并将过程名称作为参数发送,以检查它是否存在
SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
name
FROM sys.procedures;
WHERE name = @param_proc_name
并在逻辑之前从代码中调用该过程。