Я пытаюсь сделать мои интеграционные тесты более идемпотентными. Одна из идей заключалась в том, чтобы выполнить откат после каждого теста, другая идея заключалась в том, как программный синтаксический анализ текста аналогичен зеленому флажку в Query Analyzer или SSMS.
Как мне заставить SQL Server анализировать мою команду без ее использования с помощью ADO.NET?
UPDATE: Это то, что наконец-то сработало по желанию:
using (DbCommand executeOnly = Factory.DbCommand())
{
executeOnly.Connection = command.Connection;
executeOnly.CommandType = CommandType.Text;
executeOnly.CommandText = "SET NOEXEC ON;" + sqlCommand;
executeOnly.Connection.Open();
executeOnly.ExecuteNonQuery();
}
//set more properties of command.
command.Execute();
По необъяснимым причинам "SET PARSEONLY ON
" работал только в Query Analyzer. Я не мог установить это на соединение ADO.NET. Это также хорошо, потому что PARSEONLY
, кажется, улавливает только синтаксические ошибки, что не является общей ошибкой. SET NOEXEC ON
будет охватывать более широкие варианты ошибок, например представление, которое ссылается на отсутствующую таблицу или столбец или отсутствующий параметр в хранимой процедуре.