Маркеры параметров (компонент Database Engine)
Маркеры параметров поддерживаются API-интерфейсами ADO, OLE DB и ODBC. Маркер параметра — это вопросительный знак (?), указанный вместо входного или выходного выражения в инструкции языка Transact-SQL. Маркеры параметров позволяют одной и той же инструкции Transact-SQL выполняться несколько раз с разными значениями входных и выходных параметров, позволяя производить их оптимизацию.
Например, пользователь указывает в приложении пять различных ценных бумаг, и приложение вызывает хранимую процедуру, которая должна получить текущие данные для каждой из них. Приложение может выполнить следующее.
Подготовить следующую инструкцию Transact-SQL:
EXEC GetQuoteProcedure @StockSymbolParameter = ?
Привязать переменную приложения к маркеру параметра (?).
Выполнить цикл:
поместить код очередной ценной бумаги в привязанную переменную;
выполнить инструкцию, чтобы получить котировку этой ценной бумаги.
Маркеры параметров не обязательно должны сопоставляться с параметрами хранимых процедур. Маркеры параметров можно использовать везде, где используется входное выражение, например:
UPDATE HumanResources.Employees
SET Title = ?
WHERE EmployeeID = ?
Маркеры параметров также могут применяться для сопоставления выходных параметров хранимых процедур и кодов возврата. Когда приложение выполняет хранимую процедуру, поставщик OLE DB или драйвер ODBC перемещает значения данных всех выходных параметров или кодов возврата в переменные, привязанные к маркерам параметров.
Например, приложение может выполнить следующую процедуру. Эта процедура возвращает целочисленный код возврата и символьный выходной параметр.
Подготовить инструкцию:
{? = CALL MyProc (?)}
Привязать первый маркер параметра к целочисленной переменной, а второй — к массиву символов.
Выполнить инструкцию.
Выбрать или отменить все результирующие наборы, возвращенные хранимой процедурой.
Теперь поставщик OLE DB для Microsoft или драйвер ODBC SQL Server скопировал код возврата и значение выходного параметра в связанные переменные. Microsoft SQL Server возвращает значения выходного параметра и кода возврата в последнем пакете, передаваемом клиенту. Поэтому приложение должно обработать или отменить все результирующие наборы, возвращенные хранимой процедурой, до того, как она получит доступ к значениям кода возврата и выходного параметра.
API-интерфейс ADO выполняет хранимые процедуры похожим образом. Приложение ADO выполняет следующие действия:
устанавливает тип объекта Command в значение adCmdStoredProc;
устанавливает текст команды, содержащий только имя процедуры;
строит коллекцию Parameters, привязывающую все параметры и коды возврата к переменным приложения;
выполняет объект Command.
Маркеры параметров связаны с объектом базы данных, имеющих определенный тип. Если приложение связывает параметр маркера с переменной, тип данных которой отличен от типа связанного объекта базы данных, то поставщик OLE DB или драйвер ODBC должен произвести его преобразование. Например, если приложение привязывает целочисленный код возврата к массиву символов, то поставщик OLE DB или драйвер ODBC должен преобразовать целочисленные данные кода возврата в строку символов. Сведения о поддерживаемых преобразованиях типов данных см. в документации о поставщике OLE DB для SQL Server и драйвере SQL Server ODBC.
См. также