Я создаю функцию, которая требует проверить, существует ли хранимая процедура.Я протестировал следующий код с помощью SSMS
DECLARE @storedProcedureName varchar(50) = 'usp_GetHHLockMaintenanceStatus'
SELECT object_id, name
FROM sys.procedures
WHERE name = @storedProcedureName
И, как и ожидалось, он возвращает
+-----------+--------------------------------+
| object_id | name |
+-----------+--------------------------------+
| 388196433 | usp_GetHHLockMaintenanceStatus |
+-----------+--------------------------------+
Однако, когда я попробовал почти то же самое в ADO.NET
using (var conn = new SqlConnection("Data Source=ServerName,1433;Initial Catalog=DbName;Connect Timeout=60;Integrated Security=True;"))
{
conn.Open();
string query = $@"
SELECT object_id, name
FROM sys.procedures
WHERE name = @storedProcedureName";
using (var cmd = new SqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@storedProcedureName", "usp_GetHHLockMaintenanceStatus");
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DataSet resultSet = new DataSet();
adapter.Fill(resultSet);
}
}
}
resultSet
как-то пусто ...
Затем я попробовал другой способ
DECLARE @storedProcedureName varchar(50) = 'usp_GetHHLockMaintenanceStatus'
IF OBJECT_ID(@storedProcedureName, 'P') IS NOT NULL
BEGIN
SELECT 1
END
ELSE
BEGIN
SELECT 0
END
, который возвращает 1
, как и ожидалось в SSMS.Тем не менее, если я использую ADO.NET, if(SqlDataReader.Read())
будет истинным, но представление результатов покажет
Перечисление не дало результатов
Любая идея, что я сделал неправильно