C# C-确定存储过程是否存在
我编写了一个DbContext扩展来尝试并确定存储过程是否存在于其关联的数据库中C# C-确定存储过程是否存在,c#,sql-server,stored-procedures,dbcontext,exists,C#,Sql Server,Stored Procedures,Dbcontext,Exists,我编写了一个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]
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
}
问题是:无论存储过程名称是否存在,从ExecSqlCommand返回的myexists变量始终包含“-1”。因此,我无法确定存储过程是否在数据库中
在SQLServerManagementStudio中执行生成的查询按预期工作,如果存储过程存在,则返回一行,如果不存在,则不返回任何行
有人对如何通过编程实现这一点有什么想法吗?确定数据库中是否存在存储过程
谢谢
Rob您可以执行一个存储过程,并将该过程的名称作为参数发送,以检查它是否存在
SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
name
FROM sys.procedures;
WHERE name = @param_proc_name
并在逻辑之前从代码调用该过程。谢谢您的帮助。。。最后,我让它按如下方式工作:
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);
}
谢谢你的回复。我试图避免任何依赖关系。我计划在我的基本库中尽可能地保持它的通用性。我不知道我在这里是否正确,但是executesqlcommand在这里不会帮助您,因为它会在执行命令后返回数据库返回的结果。由于既没有输出参数,也没有返回的整数,因此此语句的行为与预期一致。尝试执行标量命令。我强烈建议使用更集中的目录视图,尽可能避免使用sys.objects。如果使用SELECT,您的查询将更易于阅读和理解。。从sys.procedures,其中。。。。