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