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 で実行すると、期待どおりに機能し、ストアド プロシージャが存在する場合は 1 行が返され、存在しない場合は行が返されません。

これを達成する方法についてアイデアを持っている人はいますか (データベースにストアド プロシージャが存在するかどうかをプログラムで判断します)。

ありがとうロブ

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 に答える