2013-06-10 2 views
0

я написал хранимую процедуру в SQL Server 2008. Она содержит CURSOR и внутри петли курсора некоторых значений рассчитывать и выводить с помощью ЗЕЬЕСТА как:возврат одного набора данных для нескольких выбирает

CURSOR START 

SELECT OBJECT, REVENUE 

CURSOR END 

Проблема заключается в том, что когда выполнение завершает свою работу, возвращается несколько таблиц для каждой строки. Мне нужно получить одну таблицу со всеми строками. Есть ли способ достичь этого, не используя ТАБЛИЦУ?

Основная причина, по которой я хочу так, когда я выполняю процедуру из PHP ODBC, я просто получаю первую строку.

+3

Вы * определенно *, что вы * должны * использовать курсор? Можете ли вы показать нам код более полно? Мы можем показать вам альтернативы. Кроме того, даже если вы используете курсор, почему * должен * вы избегать использования таблицы? Таблицы Temp и Table Variables выглядят вполне уместными. – MatBailie

+0

@dems Да, теперь я пытаюсь использовать переменную таблицы. Раньше я не знал об этой функции. –

ответ

3

попробовать это

DECLARE @tmp TABLE(field1 VARCHAR(50),field2 VARCHAR(50)) 
CURSOR START 
    INSERT INTO @tmp 
     (field1, field2) 
    SELECT OBJECT, REVENUE 

CURSOR END 
SELECT * FROM @tmp 
+0

+1 Спасибо, это сработало хорошо. –

1

Insertвозвращается значения в таблице временной/таблицу переменной, а затем select от после курсора.

1

Вы должны будете использовать какой-то таблицы для хранения временных данных. Если вы не хотите использовать «реальную» таблицу базы данных, вы можете использовать temporary table или table variable.

Это конструкции, которые в рамках процедуры для всех целей и задач ведут себя как таблица, но не являются фактическими таблицами в вашей базе данных.

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