2016-12-28 2 views
-4

У меня есть курсор:Как читать один столбец из курсора, определенного с несколькими столбцами

DECLARE db_inner_cursor_info CURSOR FOR Select Col1 , Col2 ..... from TBL1 

OPEN db_inner_cursor_info 
    FETCH NEXT FROM db_inner_cursor_info 
    INTO @Col1 
    print @Col1 
etc. 

Мне нужно только значения из TBL1.Col1, но я не могу удалить остальные столбцы из SELECT заявления в пределах объявление курсора.

Как я могу это достичь?

+4

** почему ** вы не можете удалить остальные столбцы из 'SELECT'? – Lamak

+4

Тогда почему вы объявляете курсор для выбора всех этих столбцов? – LONG

+1

Если вы не можете удалить их из оператора select, вам придется объявлять переменные для всех столбцов и использовать только те, которые вы хотите. –

ответ

4

Если вы действительно не можете изменить SELECT заявление в объявлении курсора (который я бы сказал вам абсолютно должны быть в состоянии), то единственным вариантом является также получать другие столбцы из этого SELECT заявления в переменные в вашей статье INTO, даже если вы не используете эти переменные для чего:

DECLARE @Col1 VARCHAR(50) 
DECLARE @Col2 VARCHAR(50) 
DECLARE @Col3 VARCHAR(50) 
DECLARE @Col4 VARCHAR(50) 

DECLARE db_inner_cursor_info CURSOR FOR Select Col1 , Col2, Col3, Col4 from TBL1 

OPEN db_inner_cursor_info 
FETCH NEXT FROM db_inner_cursor_info INTO @Col1, @Col2, @Col3, @Col4 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    PRINT @Col1 
    FETCH NEXT FROM db_inner_cursor_info INTO @Col1, @Col2, @Col3, @Col4 
END 

CLOSE db_inner_cursor_info 
DEALLOCATE db_inner_cursor_info 

Как вы можете видеть, в то время как мы извлекаем значение из всех столбцов в TBL1, мы используем только значение от Col1.

+1

Правильно, я не могу думать о какой-либо ситуации (кроме, может быть, более старшего разработчика, просто говорящего так - но я все равно сомневаюсь в этом), где вам запрещено изменять ваши 'declare', чтобы соответствовать требованиям соответствующего' fetch'. Почему вы должны «объявлять» и «выбирать» столбцы для курсора, который никогда не будет использоваться? Это не имеет никакого смысла. – gmiley

1

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

DECLARE db_inner_cursor_info CURSOR FOR Select Col1 , Col2, col3 from TBL1 

OPEN db_inner_cursor_info 
       FETCH NEXT FROM db_inner_cursor_info 
       INTO @Col1, @Col2, @Col3 
1

Это звучит довольно странно, но вы можете объявить дополнительные переменные, выберете в них дополнительные переменные, но ничего не сделайте с ними. Что-то вроде ....

Declare @Col1 Varchar(10), @Col2 Varchar(10),..... 

DECLARE db_inner_cursor_info CURSOR FOR 
Select Col1 , Col2 ..... from TBL1 

OPEN db_inner_cursor_info 

FETCH NEXT FROM db_inner_cursor_info INTO @Col1, @Col2 ....... 
Смежные вопросы