Published on

June 13, 2011

Вызов хранимых процедур в SQL Server

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

Давайте начнем с создания примера хранимой процедуры с одним входным параметром (@incoming) и одним выходным параметром (@outgoing). В компоненте OLEDB Command мы можем написать оператор execute для вызова процедуры. Однако, когда мы переходим на вкладку Column Mapping, мы сталкиваемся с первой проблемой. Компонент не распознает автоматически, как обратиться к параметрам или организовать их, поэтому нам нужно пометить каждый параметр символом “?”.

EXEC dbo.usp_sampleProcedure ?, ? OUTPUT

После того, как мы пометили параметры, мы можем перейти на вкладку Column Mappings. Здесь мы можем сопоставить столбцы потока данных с параметрами процедуры. Компонент автоматически получает имена параметров из процедуры, включая специальный параметр “@RETURN_VALUE”. Важно сопоставить этот параметр с столбцом, чтобы передать его вниз по потоку данных.

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

Стоит отметить, что процедура, используемая в этом примере, довольно проста, но в реальных сценариях вы можете столкнуться с более сложными процедурами. Существуют два способа вызова хранимой процедуры: “Pass-by-Position” или “Pass-by-Parameter”. Мой предпочитаемый метод – “Pass-by-Parameter”, где вы перечисляете имена параметров и передаете им значения. Если параметр определен внутри процедуры со значением по умолчанию, вам не нужно передавать его явно. SQL Server будет использовать значение по умолчанию, определенное внутри процедуры.

DECLARE @out INT
EXEC dbo.usp_sampleProcedure @outgoing = @out OUTPUT

С другой стороны, если вы выберете использовать “Pass-by-Position”, вам нужно предоставить значения для всех параметров в порядке, в котором они определены в процедуре.

DECLARE @out INT
EXEC dbo.usp_sampleProcedure 2, @out OUTPUT

Важно отметить, что смешивание двух методологий не допускается. Вы должны либо использовать “Pass-by-Position”, либо “Pass-by-Parameter”. Попытка смешать их приведет к ошибке.

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.