Showind2

table_name  index_name    index_id

-----------  -----------      ---------

titles           titleidind          1

titles           titleind            2

(2 rows affected, return status =0)

 

Если в процедуре предусмотрен параметр, но он не указан, и в операторе create procedure для этого параметра не указано никакого значения по умолчанию, то SQL Сервер выводит сообщение об ошибке и перечисляет параметры, которые должны быть заданы.

 

NULL как значения по умолчанию для параметра

 

Значение по умолчанию может быть неопределенным (NULL). В этом случае, если пользователь не указывает параметр, то SQL Сервер не выдает сообщения об ошибке и выполняет сохраненную процедуру.

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

 

create procedure showind3 @table varchar(30) = null

as

if @table is null

    print "Please give a table name"

else

   select table_name = sysobjects.name,

     index_name = sysindexes.name, index_id = indid

   from sysindexes, sysobjects

   where sysobjects.name = @table

   and sysobjects.id = sysindexes.id

 

Если пользователь забыл ввести значения параметра, то SQL Сервер выведет на экран указанное в процедуре сообщение.

Другие примеры установки неопределенного значения в качестве значения по умолчанию можно увидеть в тексте системных процедур с помощью процедуры sp_helptext.

 

Символы замены в значениях по умолчанию параметров

 

Если в процедуре используется параметр с ключевым словом like, то значение по умолчанию может содержать символы замены (%, _, [] и [^]).

В следующем примере процедура showind изменена таким образом, чтобы она выдавала информацию о системных таблицах, если пользователь не указал название таблицы в качестве параметра:

 

create procedure showind4 @table varchar(30)="sys%"

as

select table_name = sysobjects.name,

    index_name = sysindexes.name, index_id = indid

from sysindexes, sysobjects

where sysobjects.name like @table

and sysobjects.id = sysindexes.id

 

Использование нескольких параметров

 

Ниже приведен один из вариантов сохраненной процедуры au_info, которая содержит значения по умолчанию с символами замены для обоих параметров:

 

create proc au_info2 @lastname varchar(30) = "D%",

  @firstname varchar(18) = "%" as