C # – определение наличия хранимой процедуры

Я написал расширение 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 } 

Проблема в том, что независимо от того, существует ли имя хранимой процедуры или нет, моя exists переменная (возвращаемая из ExecSqlCommand ) всегда содержит «-1». Поэтому я не могу определить, хранится ли хранимая процедура в базе данных или нет.

Выполнение сгенерированного запроса в SQL Server Management Studio работает должным образом, возвращая одну строку, если хранимая процедура существует, и нет строк, если это не так.

Кто-нибудь есть идеи о том, как достичь этого (программно определить, существует ли хранимая процедура с базой данных)?

Благодаря Робу

Спасибо за помощь … В конце концов, я получил это, чтобы работать следующим образом:

  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); } 

вы можете выполнить хранимую процедуру и отправить имя процедуры в качестве параметра, чтобы проверить, существует ли она

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

и вызов этой процедуры из вашего кода перед вашей логикой.

  • EF ObjectQuery <T> Контекст, параметры, свойства соединения, эквивалентные по DbSet <T>
  • Динамическое использование DbContext
  • Выполнение сложного необработанного SQL-запроса в EF6
  • как преобразовать полный запрос соответствия слова из sql в ef
  • Создание DbContext с использованием как настраиваемых ConnectionString, так и DbProviderInfo
  • Могу ли я инструктировать EF DbContext использовать «реальные» имена параметров?
  • umbraco 7 как получить доступ к базе данных MVC
  • Interesting Posts

    суб-запрос sql server с разделенным запятыми набором результатов

    Как исправить процедуру ошибки ожидает параметр '@parameters' типа 'ntext / nchar / nvarchar'?

    Создание команды SQL UPDATE, зная команду SELECT?

    Ошибка SQL Server 2005: даты возврата в виде строк

    восстановить базу данных sql sql

    Сортировка в представлении сведений об объекте объекта SSMS

    Какая версия SQL Server поддерживает. Framework framework 4.5?

    Когда имеет смысл иметь одну транзакцию для нескольких подключений к базе данных?

    Поставщик службы Entity Framework не найден для поставщика ADO.NET с инвариантным именем «System.Data.SqlClient».

    Разница во времени выполнения хранимой процедуры SQL

    RoundhousE – изменение имени, используемого скриптами

    Внешняя резервная копия Microsoft SQL Server 2008

    Использование SQL Server 2008 Standard для первоначального запуска .com

    Вставьте кадр данных pandas в таблицу SQL temp

    Как эффективно найти текущее обновление для нескольких записей в SQL?

    Давайте будем гением компьютера.