Вызов PROC в курсоре - PullRequest
       14

Вызов PROC в курсоре

0 голосов
/ 25 августа 2011

У меня есть таблица с именем my_table с этой схемой:

+----+--------------------------+-----------------------------+--------------------+
| ID | name (4 possible values) |  action (2 possible values) | sequence (1,2...n) |
+----+--------------------------+-----------------------------+--------------------+

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

Например, если seq = 1, то должна выполняться хранимая процедура # 1. Если seq = 2, он переходит к хранимой процедуре # 4 в зависимости от значений name и action. Есть 8 возможных совпадений.

Вот моя попытка:

SET NOCOUNT ON
DECLARE @name varchar(20), @action varchar(20), @ID int, @Seq varchar(20)
DECLARE ILOOP CURSOR FOR SELECT ID, Name, Action, Seq FROM my_table
OPEN ILOOP
FETCH NEXT FROM iloop INTO @ID, @name, @Action, @Seq
WHILE @@Fetch_Status = 0 BEGIN
    SELECT * From my_table WHERE Name = case Name when 'provider'
    then EXEC sp1
END
CLOSE ILOOP
DEALLOCATE ILOOP 
RETURN

1 Ответ

1 голос
/ 25 августа 2011

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

SET NOCOUNT ON

DECLARE @Name VARCHAR(20) ,
    @Action VARCHAR(20) ,
    @ID INT ,
    @Seq VARCHAR(20)

DECLARE ILOOP CURSOR
FOR
    SELECT  ID ,
            Name ,
            Action ,
            Seq
    FROM    my_table
    ORDER BY Seq

OPEN ILOOP
FETCH NEXT FROM ILOOP INTO @ID, @Name, @Action, @Seq
WHILE @@Fetch_Status = 0 
    BEGIN
        IF @Name = 'A'
            AND @Action = 'X' 
            EXEC sp1 @Action, @ID, @Name
        ELSE 
            IF @Name = 'C'
                AND @Action = 'Y' 
                EXEC sp2 @Action, @ID, @Name

        FETCH NEXT FROM ILOOP INTO @ID, @Name, @Action, @Seq    
    END
CLOSE ILOOP
DEALLOCATE ILOOP 
...