Я написал расширение DbContext
, чтобы попытаться определить, существует ли хранимая процедура в его связанной базе данных.C# - Определение наличия хранимой процедуры
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 ....' –