2011-01-05 7 views
0

Кто-нибудь знает, как получить проверку времени компиляции параметров, передаваемых в хранимую процедуру. Пример Если Proc1 вызывает Proc2, но указывает недопустимое имя параметра для Proc2. В настоящее время я узнаю во время работы. Есть ли способ узнать, когда я создаю Proc1?Проверка хранимой процедуры SQL Server Проверка времени компиляции

Спасибо большое, Том

ответ

0

Это не представляется возможным. Для сценария вы даете.

create proc dbo.foo 
@a int 
as 
select 1 

go 

create proc dbo.bar 
as 
exec dbo.foo @b=10 

Единственный способ обнаружить ошибку - выполнить ее. Очевидно, что вы можете выполнить транзакцию, которая откатывается и автоматизирует эти тесты.

+0

Спасибо Мартин. Вы точно понимаете проблему. Я не хочу выполнять выполнение, даже если он находится в транзакции просто потому, что мне придется писать инструкции выполнения для каждого сохраненного proc. Вы уверены, что это невозможно? Я думал, что другой инструмент сделал проверку, например Visual Studio, но не уверен. Интересно, как это сделает другой инструмент, если на самом деле они это сделают. Я могу написать приложение, чтобы перебрать все процессы и вызвать их в транзакции. – Thomas

+0

@Thomas - я попробовал 'SET NOEXEC ON' и' SET PARSEONLY ON', как обсуждалось здесь http://stackoverflow.com/questions/3084387/how-can-i-programmatically-check-parse-the-validity-of- a-tsql-statement, и ни одна из ошибок не привела к моему заключению. Глядя на него снова, хотя я вижу, что SSMS intellisense дает сообщение '@b не является параметром для процедуры foo'. Я не уверен, есть ли способ использовать проверку, которую он делает. Кроме того, запуск 'SET FMTONLY ON exec dbo.bar' возвращает сообщение об ошибке. –

Смежные вопросы