Проверка хранимой процедуры без влияния на базу данных - PullRequest
6 голосов
/ 19 марта 2012

Мне нужно запустить тест хранимой процедуры в базе данных клиента. Есть ли способ проверить хранимую процедуру, не влияя на данные в базе данных?

Например, в SP есть запрос на вставку, который изменит данные базы данных.

Есть ли способ решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

Вы можете запустить хранимую процедуру в транзакции.Используйте этот скрипт, поместив ваши утверждения между строк комментария.Запустите весь скрипт, ваша транзакция будет в незафиксированном состоянии.Затем выделите строку ROLLBACK или COMMIT и выполните либо соответственно, чтобы завершить.

Всегда иметь резервные копии.

Если возможно, работайте в песочнице вдали от ваших клиентовданные в принципе.

Имейте в виду, что вы можете блокировать данные, которые могут задерживать другие операторы sql вашим клиентом, пока вы принимаете решение о принятии или откате.

BEGIN TRANSACTION MyTransaction
GO

-- INSERT SQL BELOW


-- INSERT SQL ABOVE

GO
IF @@ERROR != 0
BEGIN
        PRINT '--------- ERROR - ROLLED BACK ---------'
        ROLLBACK TRANSACTION MyTransaction
END
ELSE
BEGIN
        PRINT '--------- SCRIPT EXECUTE VALID ---------'
        PRINT '--------- COMPLETE WITH ROLLBACK OR COMMIT NOW! ---------'
        --ROLLBACK TRANSACTION MyTransaction
        --COMMIT TRANSACTION MyTransaction
END
2 голосов
/ 19 марта 2012

Если SP предназначен для изменения данных, и если вы не разрешаете изменять данные, то как вы будете «тестировать» SP?Вы просто убедитесь, что он не умрет?Что если он не возвращает ошибок, но не вставляет данные?

Вы можете пойти по пути, аналогичному предложенному Валамасом, но вам также нужно будет на самом деле проверить SP.Например, если определенные данные предназначены для вставки на основе определенных значений параметров, вам необходимо:

  1. Начать транзакцию
  2. Создать любые тестовые данные в базе данных
  3. Вызов SP с определенными значениями параметров
  4. Все еще в транзакции, проверьте базу данных, чтобы увидеть, были ли вставлены правильные строки
  5. Откат транзакции

Я не могу показать вам код, но мне удалось выполнить вышеизложенное в коде в .NET, используя среду модульного тестирования Visual Studio.Можно сделать то же самое с NUnit или любым другим модульным тестовым фреймворком.Я не использовал функцию модульного тестирования базы данных в проектах базы данных Visual Studio.Я просто выполнил описанные выше шаги в коде, используя ADO.NET и класс SqlTransaction для управления транзакцией.

...