Разобрать все хранимые процедуры в базе данных - PullRequest
6 голосов
/ 18 сентября 2010

Кто-нибудь знает способ проверки правильности запросов во всех хранимых процедурах в базе данных? Я думаю о сценарии, где, если вы измените что-то в файле кода, простое перестроение покажет вам ошибки компиляции, которые укажут на места, где вам нужно что-то исправить. В сценарии базы данных, скажем, если вы измените таблицу и удалите столбец, который используется в хранимой процедуре, вы ничего не узнаете об этой проблеме до тех пор, пока эта процедура не будет запущена в первый раз.

Ответы [ 3 ]

4 голосов
/ 18 сентября 2010

Что вы описываете, так это то, для чего предназначено юнит-тестирование. Хранимые процедуры и функции часто требуют установки параметров, и если хранимая процедура или функция инкапсулирует динамический SQL - есть вероятность, что [угловой] случай пропущен.

Кроме того, все, что вы упоминаете, это проверка основных ошибок - ничего о проверке возвращаемых данных. Например - я могу изменить точность числового столбца ...

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

1 голос
/ 18 сентября 2010

Вы можете создать все свои объекты с помощью SCHEMABINDING, что помешает вам изменить любые базовые таблицы без удаления и воссоздания представлений и процедур, построенных поверх них.

В зависимости от вашего процесса разработки, это может быть довольно громоздким. Я предлагаю это как решение, потому что, если вы хотите гарантировать правильность всех процедур в БД, это сделает это.

0 голосов
/ 13 мая 2013

Я нашел этот пример в MSDN (SQL Server 2012). Я думаю, это может быть использовано в некоторых сценариях:

USE AdventureWorks2012;
GO

SELECT p.name, r.* 
FROM sys.procedures AS p
CROSS APPLY sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r;

Источник: sys.dm_exec_describe_first_result_set_for_object

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...