У меня вопрос относительно курсора в t-sql. Когда я сделаю такой курсор, он окажется в бесконечном цикле.Cursor - Объявить выбор-заявление, выполненное несколько раз?
drop table [dbo].[cursorcheck]
GO
CREATE TABLE [dbo].[cursorcheck](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Wert] [varchar](10) NOT NULL
) ON [PRIMARY]
GO
delete dbo.cursorcheck
GO
insert into dbo.cursorcheck
select 'Insert'
GO
DECLARE @vendor_id int, @vendor_name nvarchar(50);
DECLARE vendor_cursor CURSOR FOR
SELECT ID, wert
FROM dbo.cursorcheck
WHERE wert = 'insert';
OPEN vendor_cursor
FETCH NEXT FROM vendor_cursor
INTO @vendor_id, @vendor_name
WHILE @@FETCH_STATUS = 0
BEGIN
insert into dbo.cursorcheck
select 'Insert'
FETCH NEXT FROM vendor_cursor
INTO @vendor_id, @vendor_name
END
CLOSE vendor_cursor;
DEALLOCATE vendor_cursor;
Я немного смущен этим поведением. Означает ли это, что скрипт select, указатель которого был объявлен, выполняется несколько раз? я получил тот же эффект, когда я вставляю в эту таблицу из другой транзакции при отладке курсора. проблема решена, когда я использую «статическое» ключевое слово для объявления курсора. но я запутался в поведении курсора, когда я не использую ключевое слово static.
любое объяснение?
С уважением, Рето
спасибо. Да. это правда. но это означает, что оператор «select» снова запускается против базы данных, а не только в начале, правильно? – csarwi
@RetoWietlisbach Без 'STATIC' он работает с реальными данными (например, отложенным исполнением), STATIC сначала считывается один раз и хранится в tempdb – lad2025