2

我编写了一个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 中执行生成的查询按预期工作,如果存储过程存在则返回一行,如果不存在则不返回任何行。

有没有人对如何实现这一点有任何想法(以编程方式确定数据库是否存在存储过程)?

谢谢罗伯

4

2 回答 2

6

感谢您的帮助......最后我让它工作如下:

    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);
    }
于 2013-09-04T01:36:54.853 回答
0

您可以执行存储过程,并将过程的名称作为参数发送以检查它是否存在

               SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
                       name
               FROM sys.procedures;
               WHERE name = @param_proc_name

并在您的逻辑之前从您的代码中调用该过程。

于 2013-09-04T00:00:25.120 回答