Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не обновляются данные select в цикле\курсоре.  [new]
QSetner
Member

Откуда:
Сообщений: 2
Есть таблица с данными Qoob(id, id projects).
В таблицу занесена одна запись (1).

В процедуре myFoo создаётся временная таблица #moon с одной колонкой TProj и забивается двумя значениями (1 и 2).
Далее в процедуре myFoo перебираются значения TProj и ищутся в таблице Qoob.
Проблема в том, что я получаю одни и те же данные для каждой строки #moon (хотя они должны быть разные, потому что в первой итерации среди списка (1) ищется значение 1, а во второй итерации среди списка (1) ищется значение 2).
Как будто select в курсоре забирает данные из #moon только первый раз.

Я новичок в Ms SQL, поэтому не знаю причины. В примерах всё также как я сделал.

Благодарю за помощь!

USE master;  
GO
IF DB_ID ( 'qSetner' ) IS NOT NULL
DROP DATABASE qSetner;
GO
CREATE DATABASE qSetner; 
GO
USE qSetner;




CREATE TABLE Qoob (
	QoobId			INT IDENTITY PRIMARY KEY,
	QoobProj		INT
);

Insert into Qoob values (1)

GO

CREATE PROC myFoo
AS
BEGIN

	CREATE TABLE #heh
	(
		one INT,
		two INT
	)
	
	CREATE TABLE #moon
	(
		TProj INT
	)
	
	INSERT INTO #moon VALUES (1)
	INSERT INTO #moon VALUES (2)
	

	DECLARE @QProj INT
	DECLARE @QoobFound INT	
	DECLARE test_cur CURSOR FOR 
	SELECT TProj FROM #moon
	OPEN test_cur
	FETCH NEXT FROM test_cur INTO @QProj
	WHILE @@FETCH_STATUS = 0
	BEGIN
	
		SELECT @QoobFound = QoobId FROM Qoob WHERE (QoobProj = @QProj)
		
		INSERT INTO #heh VALUES (@QoobFound, @QProj)
		
		FETCH NEXT FROM test_cur INTO @QProj
		
	END
	
	CLOSE test_cur
	DEALLOCATE test_cur
	
	select * from #heh
	
END
GO


EXEC MyFoo
GO


Картинка с другого сайта.

К сообщению приложен файл (qSetner.sql - 926bytes) cкачать
13 апр 19, 23:43    [21861396]     Ответить | Цитировать Сообщить модератору
 Re: Не обновляются данные select в цикле\курсоре.  [new]
invm
Member

Откуда: Москва
Сообщений: 8489
SELECT @QoobFound = QoobId FROM Qoob WHERE (QoobProj = @QProj)
if @@rowcount > 0
 INSERT INTO #heh VALUES (@QoobFound, @QProj)

ЗЫ: Завязывайте с курсорами.
14 апр 19, 00:02    [21861400]     Ответить | Цитировать Сообщить модератору
 Re: Не обновляются данные select в цикле\курсоре.  [new]
QSetner
Member

Откуда:
Сообщений: 2
invm, Благодарю!
14 апр 19, 00:17    [21861401]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить