Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Цикл по курсору обходит не все строки  [new]
Glory
Member

Откуда:
Сообщений: 104751
адо
Ни то, ни другое невозможно из-за параноидальной политики безопасности.

Ага, давайте подметать лужи ломами.
Ибо мне не нужно, чтобы луж не было. Мне нужно, чтобы вы зае-лись.
20 май 14, 17:29    [16044076]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
После открытия курсора, посмотрите что вернет @@cursor_rows
20 май 14, 17:38    [16044153]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
STATIC не совместим с FAST_FORWARD
Слабо верится в "добавил STATIC"
20 май 14, 17:52    [16044243]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
invm
После открытия курсора, посмотрите что вернет @@cursor_rows

@@cursor_rows возвращает то, что и ожидается, то есть число, совпадающее с количеством записей, которое возвращает запрос
SELECT
		t1.ID as id,
		t3.DESCR as descr
	FROM
		t1
		INNER JOIN t2 (NOLOCK) ON t2.PARENTEXT = t1.ID
		INNER JOIN t3 as ON t3.ID = t2.t3id
	WHERE
		t2.IsMark = 0
	ORDER BY
		id
20 май 14, 18:07    [16044343]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
Зайцев Фёдор
STATIC не совместим с FAST_FORWARD
Слабо верится в "добавил STATIC"


Хммм, справка говорит, что FAST_FORWARD не совместим только с SCROLL и FOR_UPDATE
20 май 14, 18:08    [16044349]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
адо
Зайцев Фёдор
STATIC не совместим с FAST_FORWARD
Слабо верится в "добавил STATIC"


Хммм, справка говорит, что FAST_FORWARD не совместим только с SCROLL и FOR_UPDATE

А справка, случайно, не говорит, что FAST_FORWARD - фишка динамических курсоров?
20 май 14, 18:10    [16044365]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
Зайцев Фёдор
адо
пропущено...
Хммм, справка говорит, что FAST_FORWARD не совместим только с SCROLL и FOR_UPDATE

А справка, случайно, не говорит, что FAST_FORWARD - фишка динамических курсоров?


Нет, не говорит. А можно пруф?
20 май 14, 18:16    [16044393]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
адо
Зайцев Фёдор
пропущено...

А справка, случайно, не говорит, что FAST_FORWARD - фишка динамических курсоров?


Нет, не говорит. А можно пруф?

Этого уже нет в справке) Раньше было в BOL.
А что, у вас без ошибок выполняется следующий код?
declare c cursor static fast_forward for select * from sys.objects
20 май 14, 18:29    [16044450]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Зайцев Фёдор
адо
пропущено...
Нет, не говорит. А можно пруф?

Этого уже нет в справке) Раньше было в BOL.
А что, у вас без ошибок выполняется следующий код?
declare c cursor static fast_forward for select * from sys.objects
в описании синтаксиса явно указано [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ], что значит "только одна из опций"
20 май 14, 18:41    [16044491]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
Упростил до предела. Загнал результат запроса в промежуточную таблицу, и на ней уже построил курсор. Получилось так:

DECLARE @id CHAR(9)
DECLARE @descr VARCHAR(70)

DECLARE cur CURSOR LOCAL STATIC FOR
	SELECT
		id,
		descr
	FROM
		#mytemptable1
	ORDER BY
		id

OPEN cur

FETCH NEXT FROM cur INTO 
	@id,
	@descr

WHILE @@FETCH_STATUS = 0 BEGIN
	INSERT INTO #mytemptable(
	id,
	descr)
	VALUES(@id,
	@descr)


	FETCH NEXT FROM cur INTO 
		@id,
		@descr
END

CLOSE cur
DEALLOCATE cur;


При этом
SELECT * FROM #mytemptable1
возвращает 6195 записей, а
SELECT * FROM #mytemptable
-- 169.
Шайтанама! Ну где оно может ломаться?
20 май 14, 18:46    [16044508]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Ну даже фиг знает
DECLARE @descr VARCHAR(1000)
20 май 14, 18:52    [16044530]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Shakill
в описании синтаксиса явно указано [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ], что значит "только одна из опций"
Я как бы вопрос задал про безошибочное выполнение. Ваш ответ - это "да" или "нет"?
И да, "в описании синтаксиса явно указано" STATIC | DYNAMIC, что значит "только одна из опций". Самому не смешно?
20 май 14, 18:55    [16044547]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
Зайцев Фёдор
адо
пропущено...


Нет, не говорит. А можно пруф?

Этого уже нет в справке) Раньше было в BOL.
А что, у вас без ошибок выполняется следующий код?
declare c cursor static fast_forward for select * from sys.objects

Каюсь, не заметил. fast_forward у меня уже удален был, когда я static добавил.
20 май 14, 19:02    [16044581]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
Зайцев Фёдор
Ну даже фиг знает
DECLARE @descr VARCHAR(1000)

А что такого? VARCHAR, вроде, до 8000 знаков допускает.
20 май 14, 19:05    [16044591]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
адо
Зайцев Фёдор
Ну даже фиг знает
DECLARE @descr VARCHAR(1000)

А что такого? VARCHAR, вроде, до 8000 знаков допускает.

Да это я уже теней шугаюсь ))

Ошибки при выполнении возникают?
Если нет, то ничего умнее
set rowcount 0;
в голову не приходит
20 май 14, 19:09    [16044605]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
В том то и беда, что никаких ошибок.
20 май 14, 19:26    [16044667]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
адо
При этом
SELECT * FROM #mytemptable1
возвращает 6195 записей, а
SELECT * FROM #mytemptable
-- 169.
Шайтанама! Ну где оно может ломаться?
Что вернет
SELECT count(distinct ID) FROM #mytemptable1
20 май 14, 19:44    [16044732]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
адо,

Чудес не бывает.
В начало скрипта - set nocount on. Иначе иногда в клиенте можно не отловить ошибку.
Либо оберните цикл в try/catch и ловите ошибку на сервере.
20 май 14, 19:52    [16044759]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Edkonst2008
Member

Откуда:
Сообщений: 503
адо,

CREATE TABLE dbo.#mytemptable
(
	id CHAR(9),
	descr VARCHAR(1000)	 
);


Ниже вы в курсоре используете неявное преобразования поля id. На нем не может валиться?
20 май 14, 21:32    [16045093]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
Edkonst2008
адо,

CREATE TABLE dbo.#mytemptable
(
	id CHAR(9),
	descr VARCHAR(1000)	 
);


Ниже вы в курсоре используете неявное преобразования поля id. На нем не может валиться?


Теоретически не должно, но попробую сделать явным.
20 май 14, 21:57    [16045192]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
адо,

После цикла чему равен @@FETCH_STATUS?
21 май 14, 09:51    [16046219]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Зайцев Фёдор
Shakill
в описании синтаксиса явно указано [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ], что значит "только одна из опций"
Я как бы вопрос задал про безошибочное выполнение. Ваш ответ - это "да" или "нет"?
И да, "в описании синтаксиса явно указано" STATIC | DYNAMIC, что значит "только одна из опций". Самому не смешно?

не поняли друг друга
это был комментарий не про выполнение, а про то что в справке нет слов, подтверждающих ваши. я сослался на описание синтаксиса, которое означает, что из четырех этих ключей можно использовать только один
21 май 14, 10:19    [16046392]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
VARCHAR(70)
Guest
а вас не смущает?


DECLARE @descr VARCHAR(70)


CREATE TABLE dbo.#mytemptable
(
	id CHAR(9),
	descr VARCHAR(1000)	 
);
21 май 14, 10:26    [16046458]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
адо
Member

Откуда:
Сообщений: 24
VARCHAR(70)
а вас не смущает?


DECLARE @descr VARCHAR(70)


CREATE TABLE dbo.#mytemptable
(
	id CHAR(9),
	descr VARCHAR(1000)	 
);


Я же в 1000 пишу 70, а не наоборот.
21 май 14, 10:31    [16046494]     Ответить | Цитировать Сообщить модератору
 Re: Цикл по курсору обходит не все строки  [new]
VARCHAR(70)
Guest
адо
VARCHAR(70)
а вас не смущает?


DECLARE @descr VARCHAR(70)


CREATE TABLE dbo.#mytemptable
(
	id CHAR(9),
	descr VARCHAR(1000)	 
);


Я же в 1000 пишу 70, а не наоборот.


1. Предварительно значения поля descr из таблицы #mytemptable1 (а размере которого вы ничего не сообщили) сохраняется в переменную @descr.
2. VARCHAR(1000) вы взяли "от балды" или ориентируюсь на реальный размер поля в исходных таблицах?
21 май 14, 10:41    [16046574]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить