процедура с выходными параметрами sql server

Процедура с выходными параметрами sql server

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

Опять же возьмем наш базу данных и определим в ней следующую хранимую процедуру:

В этой процедуре определено три параметра, с помощью которых мы будем получать минимальный и максимальный возраст в базе данных. Через параметр @name мы будем получать имя пользователя, для которого осуществляется поиск минимального и максимального возраста. Причем в данном случае параметр по умолчанию имеет значение ‘%’. Данное значение указывает на произвольную строку. То есть если значение для этого параметра передано, то процедура будет находить возраст только для пользователей с этим именем. Если же значение для параметра не передано, то процедура будет находить минимальный и максимальный возраст всех пользователей вне зависимости от имени.

Параметры @minAge и @maxAge являются выходными благодаря указанию ключевого слова out в их определении. Через них мы собственно и будем получать минимальный и максимальный возраст.

Теперь перейдем к программе на C# и определим в ней следующий код:

Теперь мы можем ввести имя пользователя, либо просто нажать на Enter, и процедура вернет нам выходные параметры. При этом может возникнуть ситуация, что пользователя с введенным именем не окажется в системе, и тогда параметры будут содержать пустые значения.

Источник

Процедура с выходными параметрами sql server

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

Опять же возьмем наш базу данных и определим в ней следующую хранимую процедуру:

В этой процедуре определено три параметра, с помощью которых мы будем получать минимальный и максимальный возраст в базе данных. Через параметр @name мы будем получать имя пользователя, для которого осуществляется поиск минимального и максимального возраста. Причем в данном случае параметр по умолчанию имеет значение ‘%’. Данное значение указывает на произвольную строку. То есть если значение для этого параметра передано, то процедура будет находить возраст только для пользователей с этим именем. Если же значение для параметра не передано, то процедура будет находить минимальный и максимальный возраст всех пользователей вне зависимости от имени.

Параметры @minAge и @maxAge являются выходными благодаря указанию ключевого слова out в их определении. Через них мы собственно и будем получать минимальный и максимальный возраст.

Общий код добавления:

Теперь применим добавленную процедуру для получения диапазона возрастов по имени:

Здесь вначале выводим список пользователей из базы данных с помощью метода GetAllUsersAsync, а затем с помощью вызова GetAgeRangeAsync ищем диапазон возрастов по имени пользователя.

Теперь мы можем ввести имя пользователя, либо просто нажать на Enter, и процедура вернет нам выходные параметры. При этом может возникнуть ситуация, что пользователя с введенным именем не окажется в системе, и тогда параметры будут содержать пустые значения.

Источник

Выполнение хранимой процедуры

В этом разделе описывается, как выполнить хранимую процедуру SQL Server при помощи среды SQL Server Management Studio или Transact-SQL.

В этом разделе

Перед началом работы

Для выполнения хранимой процедуры используется:

Перед началом

Ограничения

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

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

Рекомендации

Выполнение системных хранимых процедур

Выполнение пользовательских хранимых процедур

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

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

Если не указано уточненное имя определяемой пользователем процедуры, компонент Компонент Database Engine производит поиск процедуры в следующем порядке.

схема sys текущей базы данных;

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

Схема dbo в текущей базе данных.

Автоматическое выполнение хранимых процедур

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

Установка, очистка и контроль автоматического выполнения

Используйте процедуру sp_procoption чтобы:

обозначить существующую процедуру как автоматически запускаемую;

безопасность

Permissions

Дополнительные сведения см. в разделе «Разрешения» статьи EXECUTE (Transact-SQL).

Использование среды SQL Server Management Studio

Выполнение хранимой процедуры

В обозревателе объектов подключитесь к экземпляру компонента Компонент SQL Server Database Engine, разверните его, а затем разверните узел Базы данных.

Разверните нужную базу данных, разверните узлы Программирование и Хранимые процедуры.

Щелкните правой кнопкой мыши определяемую пользователем хранимую процедуру и выберите команду Выполнить хранимую процедуру.

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

Параметр
Указывает имя параметра.

Тип данных
Указывает тип данных параметра.

Выходной параметр
Указывает, является ли этот параметр выходным.

Передать значение NULL
Передать значение NULL в качестве значения параметра.

Значение
Введите значение параметра, передаваемое ему при вызове процедуры.

Чтобы выполнить хранимую процедуру, нажмите кнопку ОК.

Использование Transact-SQL

Выполнение хранимой процедуры

Установите соединение с компонентом Компонент Database Engine.

На панели «Стандартная» нажмите Создать запрос.

Установка и отмена автоматического запуска процедуры

Установите соединение с компонентом Компонент Database Engine.

На панели «Стандартная» нажмите Создать запрос.

Отмена автоматического выполнения процедуры

Установите соединение с компонентом Компонент Database Engine.

На панели «Стандартная» нажмите Создать запрос.

Источник

Создание хранимых процедур

На практике часто бывает нужно получить результаты запроса для определенного значения (параметра). Такие запросы называются параметризированными, а соответствующие процедуры создаются с параметрами. Например, для получения записи в таблице «Туристы» по заданной фамилии создаем следующую процедуру:

После знака @ указывается название параметра и его тип. Мы выбрали nvarchar c количеством символов 50, поскольку в самой таблице для поля «Фамилия» установлен этот тип. Попытаемся запустить процедуру:

Появляется диагностическое сообщение (рис. 5.5):

процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server

Перевод этого сообщения: «Процедура ‘proc_p1’ ожидает параметр ‘@Фамилия’, который не указан».

Запустим процедуру так:

В результате выводится запись, соответствующая фамилии «Андреева» (рис. 5.6):

процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server

Если мы укажем фамилию, которая не содержится в таблице, появится пустая запись (рис. 5.7):

процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server

В таблице 5.2 приводятся примеры хранимых процедур с параметрами.

Таблица 5.2. Хранимые процедуры с параметрами

SQL-конструкция для созданияКоманда для извлечения
1
Описание
Извлечение записи из таблицы «Туристы» с заданной фамилией
Результат запуска
процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server
SQL-конструкция для созданияКоманда для извлечения
2
Описание
Вывод родительской и дочерней записей с заданной фамилией из таблиц «Туристы» и «Информацияотуристах»
Результат запуска
процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server
SQL-конструкция для созданияКоманда для извлечения
4
Описание
Вывод родительской и дочерней записей с заданной названием тура из таблиц «Туры» и «Сезоны»
Результат запуска (изображение разрезано)
процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server
SQL-конструкция для созданияКоманда для извлечения
5

процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server

процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server

Процедуры с выходными параметрами позволяют возвращать значения, получаемые в результате обработки SQL-конструкции при подаче определенного параметра. Представим, что нам нужно получать фамилию туриста по его коду (полю «Кодтуриста»). Создадим следующую процедуру:

Оператор declare нужен для объявления поля, в которое будет выводиться значение. Получаем фамилию туриста (рис. 5.8)

процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server

Для задания названия столбца можно применить псевдоним:

Теперь столбец имеет заголовок (рис. 5.9):

процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server

Таблица 5.3. Хранимые процедуры с входными и выходными параметрами

SQL-конструкция для созданияКоманда для извлечения
1
Описание
Извлечение фамилии туриста по заданному коду
Результат запуска
процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server
SQL-конструкция для созданияКоманда для извлечения
2
Описание
Подсчет количества туристов из городов, имеющих в своем названии сочетание букв «рг». Следует ожидать число три (Екатеринбург, Оренбург, Санкт-Петербург)
Результат запуска
процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server
SQL-конструкция для созданияКоманда для извлечения
3
Описание
Подсчет количества туров, которых посетил турист с заданным значением поля «Кодтуриста»
Результат запуска
процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server
SQL-конструкция для созданияКоманда для извлечения
4
Описание
Подсчет общей суммы, которую заплатил данный турист за определенный период. Турист со значением «1» поля «Кодтуриста» внес оплату 4/13/2007
Результат запуска
процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server
SQL-конструкция для созданияКоманда для извлечения
5
Описание
Подсчет количества путевок, проданных по заданному туру
Результат запуска
процедура с выходными параметрами sql server. Смотреть фото процедура с выходными параметрами sql server. Смотреть картинку процедура с выходными параметрами sql server. Картинка про процедура с выходными параметрами sql server. Фото процедура с выходными параметрами sql server

Для удаления хранимой процедуры используется оператор drop :

Источник

Указание параметров

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

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

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

Передача значений в параметры

Значения параметра, переданные при вызове процедуры, должны быть константами или переменными. Имя функции не может быть значением параметра. Переменные могут быть пользовательскими или системными, например @@spid.

Указание имен параметров

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

При указании одного значения параметра в формате @parameter = value необходимо точно так же предоставить все последующие параметры. Если значения параметра передаются не в формате @parameter = value, значения должны передаваться в том порядке (слева направо), в котором они перечислены в инструкции CREATE PROCEDURE.

Передача параметров в формате @parameter = value с ошибками приведет к возникновению ошибки SQL Server и невозможности выполнения процедуры.

Указание типов данных параметров

Параметры должны быть определены с типом данных в момент объявления в инструкции CREATE PROCEDURE. Тип данных параметра определяет тип и диапазон допустимых значений параметра при вызове процедуры. Например, параметр типа tinyint может принимать только численные значения в диапазоне от 0 до 255 в момент передачи этому параметру. При попытке выполнить процедуру со значением, не совместимым с типом данных, происходит ошибка.

Указание значений параметра по умолчанию

Параметр считается необязательным, если он имеет значение по умолчанию при объявлении. Нет необходимости указывать значение необязательного параметра при вызове процедуры.

Значение параметра по умолчанию используется, когда:

не указано значение для параметра при вызове процедуры.

в качестве значения при вызове процедуры указывается ключевое слово DEFAULT.

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

Параметры по умолчанию не поддерживаются для Azure Synapse Analytics и Parallel Data Warehouse.

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

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

Хотя разрешается опустить параметры, для которых предоставлены значения по умолчанию, можно лишь подвергнуть усечению список параметров. Например, если у процедуры пять параметров, можно опустить как четвертый, так и пятый параметр. При этом нельзя пропустить четвертый параметр, если включен пятый, если только параметры не передаются в формате @parameter = value.

Указание направления параметров

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

Для указания выходного параметра в определении процедуры необходимо указать ключевое слово OUTPUT в инструкции CREATE PROCEDURE. Процедура, завершая свою работу, возвращает текущее значение выходного параметра в вызывающую программу. При выполнении процедуры вызывающая программа также должна использовать ключевое слово OUTPUT для сохранения значения параметра в переменной, которое затем может быть использовано в вызывающей программе.

Переменная OUTPUT должна быть определена во время создания процедуры, а также в ходе использования переменной. Имена параметра и переменной не должны совпадать. При этом тип данных и положение параметра должны быть одинаковыми (если только не используется @listprice= переменная).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *