【发布时间】:2013-09-07 08:04:24
【问题描述】:
我编写了一个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 中执行生成的查询按预期工作,如果存储过程存在则返回一行,如果不存在则不返回任何行。
是否有人对如何实现这一点有任何想法(以编程方式确定数据库中是否存在存储过程)?
谢谢 抢
【问题讨论】:
-
我强烈建议使用更有针对性的目录视图,并尽可能避免使用
sys.objects。如果您使用SELECT .. FROM sys.procedures WHERE ....,您的查询将更容易阅读和理解
标签: c# sql-server stored-procedures dbcontext exists