2015-09-03 5 views
0

У меня есть ситуация, когда вы отправляете идентификаторы, имеющие статус Неактивно через сохраненную процедуру. Кроме того, в том же пакете SP, как только я отправляю неактивные идентификаторы, мне нужно обновить его до активного. Поэтому я делаю это в транзакции. Но не знаете, как отправлять наборы идентификаторов, а также если мое обновление правильно или нет. Думаю, мне нужно зациклиться на обновление? Пожалуйста, помогите мне с конструкцией.Как вернуть массив значений в выходной параметр в Stored Proc

Create Proc Name 
@ID VARCHAR INT OUT 
AS 
BEGIN 

BEGIN TRAN 
SELECT @ID = ID From MyTable 
WHERE IDType = 1 AND B ='Rev' 

Update MyTable 
Set IDType = 2 
WHERE IDType = 1 AND B='Rev' 
COMMIT TRAN 
END 
+0

Вы не можете это сделать с помощью 'параметра OUTPUT'. Лучше всего использовать инструкцию 'SELECT' в вашей хранимой процедуре. –

ответ

2

Вместо использования OUTPUT параметра, вы могли бы сделать SELECT внутри хранимой процедуры, используя пункт OUTPUT и INTO. Вот пример:

Давайте создадим тестовые данные:

CREATE TABLE MyTable(
    ID INT IDENTITY(1, 1), 
    IDType INT, 
    B VARCHAR(6) 
) 
INSERT INTO MyTable(IDType, B) VALUES 
(2, 'Rev'), (2, 'Rev'), 
(2, 'Rev'), (1, 'Rev'), 
(1, 'Rev'), (1, 'Rev'), 
(1, 'NotRev'), (1, 'NotRev'); 

MyTable:

ID   IDType  B 
----------- ----------- ------ 
1   2   Rev 
2   2   Rev 
3   2   Rev 
4   1   Rev 
5   1   Rev 
6   1   Rev 
7   1   NotRev 
8   1   NotRev 

То, что мы хотим, чтобы обновить строки WHERE IDType = 2 AND B = 'Rev'. В этом случае обновляемые строки: ID IN(4, 5, 6).

Теперь создать хранимую процедуру:

CREATE PROCEDURE MyStoredProc 
AS 
BEGIN 

    UPDATE MyTable 
     SET IDType = 2 
    OUTPUT INSERTED.ID -- Returns the IDs of the updated rows 
    WHERE 
     IDType = 1 
     AND B = 'REV' 

END 

Чтобы получить обновленные строки, используйте пункт OUTPUT.

Выполнение хранимая процедура возвратит:

ID 
----------- 
4 
5 
6 
+1

Вам не нужна временная таблица. Просто 'OUTPUT' без' INTO'. –

+0

@ Владимир Баранов, ты прав! Спасибо чувак. –

+0

@FelixPamittan: Приятель благодарит вас за то, что был так хорош и помогал мне, я дома, его 11.02 PM. Завтра утром мне нужно поехать на работу в 7.30 и нужно закончить его. Я буду использовать вашу идею, чтобы понять, как это происходит. Я обязательно отвечу здесь завтра :) У меня нет доступа к коду вне офиса, поскольку я работаю в Банке :) Приветствия – Learner