Как определить, было ли задано значение по умолчанию для хранимой процедуры? - PullRequest
2 голосов
/ 28 января 2010

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

CREATE PROCEDURE [dbo].[FooSP] 
    @FooParam INT = 15
AS

Так есть ли способ определить, был ли вызван этот SP с или без установки значения @FooParam.

IOW, есть ли способ определить, вызвал ли пользователь

exec dbo.FooSP(15)

или

exec dbo.FooSP()

Спасибо!

Ответы [ 2 ]

5 голосов
/ 28 января 2010

Если вам нужно это сделать, вам, как правило, лучше изменить значение по умолчанию на какое-то часовое значение (NULL часто хорошо работает в хранимых процедурах в БД), а также добавить некоторую логику в процедуру, чтобы установить старое значение по умолчанию (в данном случае 15), если получен NULL.

Таким образом, вы получаете преимущество от значения по умолчанию и возможность узнать, что было передано.

UPDATE

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

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

0 голосов
/ 28 января 2010

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

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